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 才能成为消息部件类型。
注释
支持数据类型 、XmlDocument 和 DataSet,而不支持 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 服务的 URI (https://go.microsoft.com/fwlink/?LinkID=155768)。
属性规则
如果在业务流程或接收管道中的自定义管道组件中设置配置属性,则会应用以下规则:
如果将消息发送到静态发送端口,则会使用为该发送端口配置的值覆盖属性值。
如果消息发送到动态发送端口,属性值将不会被修改。
如果在发送管道的自定义管道组件中设置配置属性,则应用以下规则:
无论消息是发送到静态还是动态发送端口,都不会覆盖该值。 换句话说,无论配置属性在何处设置,发送管道组件都会覆盖它。
有关自定义管道组件的详细信息,请参阅 开发自定义管道组件 (https://go.microsoft.com/fwlink/?LinkId=155769)。
有关 SOAP 发送适配器的配置属性的详细信息,请参阅 如何动态设置已使用 Web 服务的 URI (https://go.microsoft.com/fwlink/?LinkID=155768)。
将 Web 引用添加到包含多根架构的已使用 Web 服务将导致编译错误
如果为从已发布的 BizTalk 业务流程派生的 Web 服务添加对项目的 Web 引用,并且业务流程包含具有多个根的架构,则在编译项目时会发生错误。 如果向从已发布的 BizTalk 业务流程派生的项目添加 Web 引用,请确保业务流程不包含任何多根架构。
将 TypedDataSets 用作 Web 方法的参数
以下是为了支持将 TypedDataSets 作为 Web 方法的参数进行使用需要执行的步骤:
将 Web 引用添加到 C# 项目,然后生成代理。
创建 SOAP 发送端口,并在发送端口上指定代理并选择方法。
在业务编排中,定义后期绑定端口并定义消息类型。 对于不需要属性提升或可分辨字段访问的大多数情况,类型可以定义为 XMLDocument。 选择具有此类型的 PassThrough 管道。
在 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 中使用 RequestNamespace 和 ResponseNamespace 属性。
Web 服务必须符合 Web 服务互作性 (WSI) 基本配置文件版本 1.1。
添加 Web 引用不支持 Web 服务描述语言 (WSDL) 导入元素
使用导入元素为 WSDL 文件添加 Web 引用时,添加 Web 引用失败。