规划使用 Web 服务

Web 服务规划可分为两类:规划发布 Web 服务和规划使用 Web 服务。 本主题介绍使用 Web 服务的注意事项。 有关发布 Web 服务的信息,请参阅 规划发布 Web 服务1

创建计划时,请记住以下事项:

  • 在参数名称中使用两个下划线字符

    Web 方法的参数名称不能以“__”(两条下划线)开始。 以两条下划线开始的名称可以创建 XLANG/s 不支持(无法使用)的 Web 消息部分。

  • Web 方法不支持 Any 元素和 anyAttribute 属性

    对于 Web 方法,不能在架构中使用 任何 元素或任何 Attribute 属性。

  • 使用 XLANG/s 关键字

    Web 服务名称或 Web 方法名称不能是 XLANG/s 中的关键字 (keyword) 。 如果在 Web 服务名称或 Web 方法名称中使用 XLANG/s 关键字 (keyword) ,则添加 Web 服务时将收到编译错误。 有关 XLANG/s 语言保留字的列表,请参阅 XLANG/s 保留字 (https://go.microsoft.com/fwlink/?LinkId=155765) 。

  • 对参数类型的必需 XLANG/s 支持

    使用非 XLANG/s 支持的 Web 方法参数类型将导致编译错误。 例如,BizTalk Server 不支持由架构类型的一维数组组成的参数。 此外,BizTalk Server不支持多维数组。 有关 XLANG/s 语言在 BizTalk Server 中保留的字词列表,请参阅 XLANG/s 保留字 (https://go.microsoft.com/fwlink/?LinkId=155765) 。

  • 避免因添加包含 C# 关键字或标识符的 Web 引用而导致的编译错误

    使用“添加 Web 引用”添加对 BizTalk 项目的 Web 引用时,BizTalk Server将调用每个 Web 方法所需的架构类型转换为架构。 BizTalk Server将这些架构添加到 Reference.xsd。 如果架构包含 C# 关键字的元素名称或元素名称作为 C# 标识符无效,则可能会收到运行时错误。 要避免运行时错误,请确保您使用的 Web Services 不包含属于 C# 关键字或无效 C# 标识符的元素名称。

  • 不支持多个服务/端口类型定义

    BizTalk Server 支持添加具有单个服务和端口类型定义的 Web Services 文件。 若要添加具有多个服务或端口类型定义的 WSDL 文件,则可能产生下列错误:

    Could not generate BizTalk files. Object reference not set to an instance of an object.

  • 支持使用 Web 服务公开的数组

    BizTalk Server可能会使用由不BizTalk Server Web 服务的 Web 服务公开的一维和交错数组。 有关如何使用 Web 服务数组的详细信息,请参阅 如何使用 Web 服务数组 (https://go.microsoft.com/fwlink/?LinkId=155766) 。

    注意

    不支持多维数组语法。 例如 ,MyArray[1,5]

    注意

    BizTalk Server不支持使用 Web 服务公开的 DataSet 对象数组。 XLANG/s 子服务在本机上支持 .NET DataSet 类,但如果创建的 BizTalk 项目包含对公开 .NET DataSet 对象数组的 Web 服务的 Web 引用,则在尝试编译项目时会收到错误。

  • Web 方法参数必须是 Xml 可序列化的

    已使用的 Web Services 中的所有参数都必须执行 Xml 序列化。 若所添加的 Web 方法包含未执行 Xml 序列化的参数,则可能会收到以下错误消息:

    必须对 System.Xml.Element 执行 Xml 序列化,才能使其成为消息部分类型。

    注意

    支持数据类型 XmlDocumentDataSet,虽然不是 Xml Serializable。

  • 使用 web 服务 Messaging-Only

    使用仅消息传送 Web 服务时,所有BizTalk Server消息正文部件名称都必须与 Web 方法参数名称匹配。 例如,如果 Web 服务的签名为 WebMethod(MyType1 type1, MyType2 type2),则部件名称必须为 type1 和 type2,可能会收到以下运行时错误:

    Failed to retrieve the message part for parameter %1

    有关详细信息,请参阅 如何在 Messaging-Only 方案中使用 Web 服务 (https://go.microsoft.com/fwlink/?LinkId=155767) 。

  • 以编程方式配置 SOAP 发送端口

    可以在消息上下文中以编程方式设置配置属性。 无论发送端口是静态还是动态,都可以在业务流程或自定义管道组件中设置这些属性。

    注意

    若要以编程方式配置静态 SOAP 发送端口的 MethodName 属性,需要在“BizTalk Server管理控制台”的“SOAP 传输属性”对话框的“Web 服务”选项卡中,将“方法名称”设置为[稍后指定]。

    有关 MethodName 属性的详细信息,请参阅 如何动态设置已使用 Web 服务的 URI (https://go.microsoft.com/fwlink/?LinkID=155768) 。

  • 属性规则

    如果在业务流程或接收管道的自定义管道组件中设置配置属性,则需遵循下列规则:

  • 向包含多根架构的已使用 Web 服务添加 Web 引用将导致编译错误

    如果为派生自已发布 BizTalk 业务流程的 Web 服务添加对项目的 Web 引用,并且业务流程包含具有多个根的架构,则在编译项目时将发生错误。 如果给项目添加的 Web 引用派生自已发布的 BizTalk 业务流程,需确保业务流程不包含任何多根架构。

  • 使用 TypedDataSets 作为 Web 方法的参数

    为支持将 TypedDataSets 用作 Web 方法的参数,需要执行以下操作:

    1. 将 Web 引用添加到 C# 项目,然后生成代理。

    2. 创建 SOAP 发送端口并在发送端口上指定该代理,然后选择方法。

    3. 在业务流程中定义后期绑定端口和消息类型。 对于大多数不需要属性提升或可分辨字段访问的情况,可以将类型定义为 XMLDocument。 为该类型选择直通管道。

    4. 在 BizTalk Server 管理控制台中,在 SOAP 发送端口的“SOAP 传输属性”对话框中的“Web 服务”选项卡中,指定要使用创建的代理。 您还需要指定程序集、类型和方法。

  • 向包含预期 Generic-Based 参数的 Web 方法的已使用 Web 服务添加 Web 引用将导致编译错误

    如果为包含需要基于泛型的参数(如可为空参数)的 Web 方法的 Web 服务添加对项目的 Web 引用,则编译项目时将发生错误。 此操作不受支持。 您必须使用显式专用化从 XLANG/s 中调用泛型类。

  • 使用添加 Web 引用生成 BizTalk 架构

    使用“添加 Web 引用”添加对 BizTalk 项目的 Web 引用时,BizTalk Server将调用每个 Web 方法所需的架构类型转换为架构。 BizTalk Server将这些架构添加到 Reference.xsd。 若要确保 添加 Web 引用 正确生成 BizTalk 架构,Web 服务必须符合以下准则:

    • Web 方法应具有 SoapDocumentMethodAttribute 而不是 SoapRpcMethodAttribute

    • Web 服务和方法必须使用 Literal 绑定而不是 Encoded ,例如 [SoapDocumentMethod (Use=SoapBindingUse.Literal) ]

    • Web 方法参数和返回类型必须具有有效的 Namespace 属性的 XmlRootAttribute,除非它们是本机 XSD 类型和 XmlNode 类型。

    • Web 方法不得使用 SoapDocumentMethodAttribute 中的 RequestNamespaceResponseNamespace 属性。

    • Web Services 必须符合 Web Services 互操作性 (WSI) 基本配置文件版本 1.1。

  • 添加 Web 引用不支持 Web 服务描述语言 (WSDL) Import 元素

    在为具有导入元素的 WSDL 文件添加 Web 引用时,“添加 Web 引用”会失败。

另请参阅

规划 BizTalk Server 层