规划如何使用 Web 服务

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

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

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

    Web 方法的参数名称不能以“__”开头(两个下划线字符)。 以两个下划线字符开头的名称可能会创建 XLANG/s 不支持的 Web 消息部件(不可用)。

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

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

  • 使用 XLANG/s 关键字

    Web 服务名称或 Web 方法名称不能是 XLANG/s 中的关键字。 如果在 Web 服务名称或 Web 方法名称中使用 XLANG/s 关键字,则添加 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 服务不包含 C# 关键字或无效 C# 标识符的元素名称。

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

    BizTalk Server 支持通过单个服务与端口类型定义添加 Web 服务文件。 如果添加具有多个服务或端口类型定义的 WSDL 文件,可能会收到以下错误:

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

  • 支持处理由 Web 服务暴露的数组

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

    注释

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

    注释

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

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

    使用 Web 服务中的所有参数都必须是 Xml 可序列化的。 如果添加包含不可序列化的参数的 Web 方法,可能会收到以下错误消息:

    System.Xml.Element 必须是 Xml Seralizeable 才能成为消息部件类型。

    注释

    支持数据类型 、XmlDocumentDataSet,而不支持 Xml Serializable。

  • 使用 Messaging-Only Web 服务

    使用仅消息传送 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 服务的 URIhttps://go.microsoft.com/fwlink/?LinkID=155768)。

  • 属性规则

    如果在业务流程或接收管道中的自定义管道组件中设置配置属性,则会应用以下规则:

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

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

  • 将 TypedDataSets 用作 Web 方法的参数

    以下是为了支持将 TypedDataSets 作为 Web 方法的参数进行使用需要执行的步骤:

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

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

    3. 在业务编排中,定义后期绑定端口并定义消息类型。 对于不需要属性提升或可分辨字段访问的大多数情况,类型可以定义为 XMLDocument。 选择具有此类型的 PassThrough 管道。

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

  • 将 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 服务和方法必须使用文本绑定而不是编码,例如 [SoapDocumentMethod(Use=SoapBindingUse.Literal)]。

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

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

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

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

    使用导入元素为 WSDL 文件添加 Web 引用时,添加 Web 引用失败。

另请参阅

规划 BizTalk Server 层