创建 .NET 连接程序集和 Web 服务

上次修改时间: 2015年3月9日

适用范围: SharePoint Server 2010

本文内容
设计最佳实践
实现步骤
在服务中定义构造型操作
用于编写 .NET 连接程序集和 Web 服务的最佳实践

Microsoft Business Connectivity Services (BCS) 允许将各种类型的外部系统中的外部数据添加到 Microsoft SharePoint 2010 和 Microsoft Office 2010 应用程序中。这些外部系统包括:

  • 数据库

  • Web 服务

如果 Business Connectivity Services 不直接支持外部系统,则可通过编写代码借助 Business Connectivity Services 来公开外部系统。如果外部系统中的实体为静态、不经常更改并且有一小组已知类型,则可以编写 Web 服务或 .NET 连接程序集,以 Business Connectivity Services 最容易理解的格式来公开外部系统中的数据。另一方面,如果实体为动态、具有自定义类型且规模较大,可考虑为该数据源类型创建自定义连接器。不过,您必须处理连接、数据传输、安装以及自定义连接器工具。有关详细信息,请参阅使用 .NET 程序集连接器与编写自定义连接器之间的差异

下图是 Microsoft Business Connectivity Services (BCS) 的概括性体系结构图。它显示了 Business Connectivity Services 提供的不同连接器以及 .NET 程序集、Web 服务和自定义连接器是如何适合该整体体系结构的。

BCS 的高级体系结构

本主题介绍了用于编写 .NET 连接程序集和 Web 服务的最佳实践。在拥有 Web 服务或 .NET 连接程序集后,您可以利用 Microsoft SharePoint Designer 2010 与其连接并发现外部内容类型。

下表比较和对比了这两种方法。

表 1. 用于编写 .NET 连接程序集或 Web 服务的方法

Web 服务

.NET 连接程序集

实现技术

可以是符合 SOAP 1.1 或 SOAP 1.2 的任何 Web 服务。示例:ASP.NET Web 服务,WCF Web 服务端点

Microsoft .NET Framework 3.5

承载

Business Connectivity Services 不承载此 Web 服务。您必须承载此服务。

.NET 连接程序集不需要承载。您只需将 .NET 连接程序集部署到 BDC 元数据存储,剩余的事情交由 Business Connectivity Services 来处理。

工具支持

可以使用如 Microsoft Visual Studio 这样的开发工具编写 Web 服务。要为 Visual Studio 中的 Business Connectivity Services 创建 Web 服务,无需提供任何特别的项目模板或工具。

可以使用如 Microsoft Visual Studio 这样的开发工具编写 .NET 连接程序集。Microsoft Visual Studio 2010 提供一个名为"业务数据连接模型"的新项目模板,该模板附带有一组可视化设计器和代码管理功能,能够帮助您轻松地创建和调试 .NET 连接程序集及关联的 模型,并将其部署到 Business Connectivity Services。

身份验证支持

对于 Web 服务来说,Business Connectivity Services 支持下列身份验证机制:Passthrough、RevertToSelf、WindowsCredentials、Credentials 和 DigestCredentials。有关详细信息,请参阅可用的身份验证模式

在 .NET 连接程序集中,您必须处理安全和身份验证问题。如果要使用 Secure Store Service,可以使用安全存储对象模型以编程方式存储和获取凭据。此外,还可以使用用户名/密码筛选器提取用户名和密码。

类型

在 .NET 连接程序集中,可以使用 Web 服务中不可用的 .NET 类型。例如,非序列化类型。

设计最佳实践

不管是创建 Web 服务还是 .NET 连接程序集,在所编写的代码中,您都将连接到外部系统、定义外部系统中所需的外部内容类型,并包含执行每个构造型操作(方法实例)所需的代码(每种外部内容类型都支持该操作)。

同时,因为您是在 Web 服务和 .NET 连接程序集中编写代码,所以,在何处获取数据以及在数据到达 Business Connectivity Services 和 SharePoint 之前如何处理数据的选项很多。在此代码中,可以执行从多个数据源聚合数据、应用转换和业务逻辑以及处理自定义安全机制等操作。

备注

编写 Web 服务和 .NET 连接程序集的关键是基于外部内容类型进行考虑,并确保 Web 服务中的 Web 方法和 .NET 连接程序集中的方法与 BDC 支持的构造型操作匹配。这也是为了确保 Microsoft SharePoint Designer 2010 能够连接到 Web 服务和 .NET 连接程序集,从而在创建和发布服务后为创建外部内容类型提供搜索和使用方法。

例如,在 Web 服务中,确保对于外部内容类型及其签名支持的每个构造型操作,都有一个 Web 方法与推荐的构造型操作方法签名匹配(参阅下列各节)。

同样,在 .NET 连接程序集中,确保外部内容类型所需的每个构造型操作的 .NET 代码中都有方法。用户对外部内容类型执行操作(例如,读取项目或更新项目)时,Business Connectivity Services 将在运行时调用这些方法。

实现步骤

通常,在 .NET 连接程序集中,每个外部内容类型都将映射到一个类,每个构造型操作都将成为该类中的方法。在 Web 服务中,每个构造型操作都是一个 Web 方法。

.NET 连接程序集

  1. 在 .NET 连接程序集中,为每个外部内容类型创建一个类并定义它应包含的字段。应始终包含外部内容类型的标识符。通常,这是数据库表中的主键。BDC 最多支持 20 个字段的复合标识符。

  2. 创建另一个类并为其添加方法,以定义每种外部内容类型支持的构造型操作。有关示例,请参阅本主题后面的在服务中定义构造型操作

Web 服务

  1. Web 服务开发通常以定义复杂类型开始。定义每个外部内容类型的结构。此外,还要确保始终包含外部内容类型的标识符。通常,这是数据库表中的主键。BDC 最多支持 20 个字段的复合标识符。

  2. 定义外部内容类型支持的每个构造型操作的 Web 方法。有关示例,请参阅在服务中定义构造型操作一节。

在服务中定义构造型操作

实现的构造型操作取决于您的要求。下表列出了针对最常见要求而推荐实现的构造型操作。

要求

构造型操作

注释

读取外部项

SpecificFinder 和 Finder 方法实例。所有 Business Connectivity Services 客户端功能都需要这些实例。

考虑用于优化到客户端计算机的数据同步的 BulkSpecificFinder、IDEnumerator、BulkIDEnumerator、ChangedIDEnumerator 和 DeletedIDEnumerator。在许多用户或大量数据卷必须脱机的情形中,这至关重要。

写回外部项

Creator、Updater 和 Deleter 方法实例(如果外部内容类型需要创建更新删除操作)。

如果外部系统不支持写回,则将外部内容类型的所有字段标记为只读。如果要基于外部内容类型在 Outlook 中创建声明或基于代码的高级解决方案,请将 Outlook 文件夹标记为只读。

相关外部项

AssociationNavigator

Associator

Disassociator

BulkAssociationNavigator、BulkAssocatedIDEnumerator

Associator 和 Disassociator 只用于无外键关联。有关详细信息,请参阅 Microsoft.BusinessData.MetadataModel.IAssoication 类。

搜索

IDEnumerator 和 BulkIDEnumerator

AccessChecker

BinarySecurityDescriptorAccessor

与客户端断开

Finder 和 SpecificFinder 方法必须返回同一组字段,否则会对性能产生影响。如果 Finder 和 SpecificFinder 方法返回不同组字段,则用户将无法使外部内容类型与 Microsoft Office 2010 客户端断开。

当客户端脱机时,如果使用了复杂的筛选逻辑,则在您联机时可能无法获得所需的结果集。

BLOB 数据

StreamAccessor

用于编写 .NET 连接程序集和 Web 服务的最佳实践

编写 .NET 连接程序集和 Web 服务时,请考虑下列最佳实践:

  • **包含标识符。**确保始终包含每种外部内容类型的标志符。通常,这是数据库表中的主键。BDC 最多支持 20 个字段的复合标识符。

  • **处理空值。**通常,Read 操作查询外部系统,然后填写要返回的类型。确保正确处理 SpecificFinder 方法中的 null 值。可能有某些字段在外部系统中是 null(如业余爱好或地址)。能够正确处理错误和异常至关重要。因此,检查代码中的 null 和空字符串,然后在代码中对其进行修复。另外,还要考虑使用关于类型描述符的 NormalizeString 解释。

  • **匹配参数名称。**参数名称必须与外部系统中的内容匹配。如果并非所有方法的参数名称都使用大写,则 SharePoint Designer 2010 就会将其解释为不同的字段。

  • **处理异常。**确保正确处理异常。预测操作失败并引发异常。

    如果方法应返回单个项目(如特定查找工具),并且未找到请求的项目,则代码应执行下列操作:

    1. 返回 null。这是最简单的方法,而且也是最兼容的。

    2. 引发 ObjectNotFoundException。仅当有要记录的特定消息时,才能使用此异常。请避免对 Web 服务引发此异常。

    3. 引发 ObjectDeletedException。仅当已知要删除该对象时,才能使用此异常。请避免对 Web 服务引发此异常。

    4. 不引发其他异常。

    5. 不返回不完整数据或假数据。

    如果方法应该返回多个项目(如查找工具),并且未找到任何项目,则代码应执行下列操作:

    1. 返回空集合/项目枚举。这是首选项。

    2. 返回 null。

    3. 不引发任何异常。

    如果方法没有返回值(如更新),并且更新出现问题,则代码应执行下列操作:

    1. 引发异常。

    2. 不依赖返回值或错误代码。BDC 当前无法解释这些值。

有关详细信息,请参阅使用您的方法实现构造型操作

请参阅

任务

如何:将 .NET 连接程序集发布到 BDC 元数据存储区

概念

如何:创建 .NET 连接程序集

如何:从 .NET 连接程序集中使用 Secure Store Service

其他资源

使用您的方法实现构造型操作