使用 Web Services 时的注意事项
本部分说明在使用 Web Services 时应注意的事项。
在参数名称中使用两条下划线
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 保留字。
参数类型所需的 XLANG/s 支持
使用非 XLANG/s 支持的 Web 方法参数类型会导致编译错误。 例如,BizTalk Server 不支持由架构类型的一维数组组成的参数。 另外,BizTalk Server 不支持多维数组。 有关 XLANG/s 语言在 BizTalk Server 中保留的字词列表,请参阅 XLANG-s 保留字。
避免由添加包含 C# 关键字或标识符的 Web 引用导致的编译错误
使用“添加服务引用”向 BizTalk 项目添加服务引用时,BizTalk Server将调用每个 Web 方法所需的架构类型转换为架构。 BizTalk Server将这些架构添加到 Reference.xsd。 如果架构包含 C# 关键字的元素名称,或者元素名称作为 C# 标识符无效,则可能会收到运行时错误。 要避免运行时错误,请确保您使用的 Web Services 不包含属于 C# 关键字或无效 C# 标识符的元素名称。
不支持多个服务/端口类型定义
BizTalk Server 支持添加具有单个服务和端口类型定义的 Web Services 文件。 若要添加具有多个服务或端口类型定义的 WSDL 文件,则可能产生下列错误:
无法生成 BizTalk 文件。 对象引用未设置为某个对象的实例。
对使用 Web Services 提供的数组的支持
BizTalk Server 可以使用由 Web Services 提供的不是 BizTalk 的一维和交错数组。 有关如何使用 Web 服务数组的详细信息,请参阅 如何使用 Web 服务数组。
注意
不支持多维数组语法。 例如,MyArray[1,5]
。
注意
BizTalk Server不支持使用 Web 服务公开的 DataSet 对象数组。 XLANG/s 子服务本身支持 .NET 数据集类,但是如果您创建的 BizTalk 项目包含对 Web Services 的 Web 引用,而该 Web Services 提供 .NET 数据集对象的数组,那么在您尝试编译该项目时将出错。
Web 方法参数必须执行 Xml 序列化
已使用的 Web Services 中的所有参数都必须执行 Xml 序列化。 若所添加的 Web 方法包含未执行 Xml 序列化的参数,则可能会收到以下错误消息:
必须对 System.Xml.Element 执行 Xml 序列化,才能使其成为消息部分类型。
注意
支持数据类型 XmlDocument 和 DataSet,虽然不是 Xml 可序列化的。
使用仅进行消息传送的 Web Services
在使用仅进行消息传送的 Web Services 时,所有 BizTalk 消息正文的部分名都必须与 Web 方法的参数名称相匹配。 例如,如果 Web 服务的签名为 WebMethod(MyType1 type1, MyType2 type2)
,则部件名称必须是 type1 和 type2,可能会收到以下运行时错误:
未能检索参数 %1 的消息部分
有关详细信息,请参阅 如何在仅消息传送方案中使用 Web 服务。
以编程方式配置 SOAP 发送端口
可以在消息上下文中以编程方式设置配置属性。 无论发送端口为静态还是动态,您都可以在业务流程或自定义管道组件中设置这些属性。
注意
若要以编程方式配置静态 SOAP 发送端口的 MethodName 属性,需要在 BizTalk Server 管理控制台中“SOAP 传输属性”对话框的“Web 服务”选项卡中将“方法名称”设置为[稍后指定]。
有关 MethodName 属性的详细信息,请参阅 如何动态设置已使用 Web 服务的 URI。
有关“SOAP 传输属性”对话框的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的 SOAP 传输属性对话框 Web 服务选项卡。
属性规则
如果在业务流程或接收管道的自定义管道组件中设置配置属性,则需遵循下列规则:
如果将消息发送到静态发送端口,则属性值将被为该发送端口配置的值覆盖。
如果将消息发送到动态发送端口,则不会覆盖属性值。
如果在发送管道的自定义管道组件中设置配置属性,则需遵循下列规则:
无论将消息发送到静态发送端口还是动态发送端口,都不会覆盖属性值。 换言之,无论在哪里设置配置属性,发送管道组件都会将其覆盖。
有关自定义管道组件的详细信息,请参阅 开发自定义管道组件。
有关 SOAP 发送适配器的配置属性的详细信息,请参阅 如何动态设置已使用 Web 服务的 URI。
向已使用的包含多个根架构的 Web Services 添加 Web 引用将导致编译错误
如果给 Web Services 项目添加的 Web 引用派生自已发布的 BizTalk 业务流程,并且该业务流程包含具有多个根的架构,则在编译该项目时会出错。 如果给项目添加的 Web 引用派生自已发布的 BizTalk 业务流程,需确保业务流程不包含任何多根架构。
将 TypedDataSets 用作 Web 方法的参数
为支持将 TypedDataSets 用作 Web 方法的参数,需要执行以下操作:
将 Web 引用添加到 C# 项目,然后生成代理。
创建 SOAP 发送端口并在发送端口上指定该代理,然后选择方法。
在业务流程中定义后期绑定端口和消息类型。 对于不需要属性升级或可分辨字段访问的大多数情况,可以将 类型定义为 XMLDocument。 为该类型选择直通管道。
在 BizTalk Server 管理控制台中,在 SOAP 发送端口的“SOAP 传输属性”对话框中的“Web 服务”选项卡中,指定要使用创建的代理。 您还需要指定程序集、类型和方法。 有关详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“SOAP 传输属性”对话框、“Web 服务”选项卡。
如果已使用的 Web Services 所包含的 Web 方法需要基于泛型的参数,那么在将 Web 引用添加到这样的 Web Services 时,将导致编译错误
如果给 Web Services 项目添加的 Web 引用所包含的 Web 方法需要基于泛型的参数,例如空参数,则在编译此项目时会出错。 此操作不受支持。 您必须使用显式专用化从 XLANG/s 中调用泛型类。
使用“添加服务引用”生成 BizTalk 架构
使用“添加服务引用”向 BizTalk 项目添加服务引用时,BizTalk Server将调用每个 Web 方法所需的架构类型转换为架构。 BizTalk Server将这些架构添加到 Reference.xsd。 若要确保 “添加服务引用 ”正确生成 BizTalk 架构,Web 服务必须符合以下准则:
Web 方法应具有 SoapDocumentMethodAttribute 而不是 SoapRpcMethodAttribute。
Web 服务和方法必须使用 Literal 绑定而不是 Encoded,例如 [SoapDocumentMethod (Use=SoapBindingUse.Literal) ]。
Web 方法参数和返回类型必须具有具有有效 Namespace 属性的 XmlRootAttribute,除非它们是本机 XSD 类型和 XmlNode 类型。
Web 方法不得使用 SoapDocumentMethodAttribute 中的 RequestNamespace 和 ResponseNamespace 属性。
Web Services 必须符合 Web Services 互操作性 (WSI) 基本配置文件版本 1.1。
XSD 将不包含简单参数类型的节点
当您添加 Web 应用且 Web 方法具有一个简单类型的参数时,生成的 XSD 将不包含该参数的节点。 而生成的多部分消息将包含属于简单类型的参数。 业务流程应适当地处理此消息部分。 如果它属于到 Web 服务的请求,则将值手动分配到具有消息赋值形状的消息部分。 如果它属于来自 Web 服务的响应,则对表达式形状的消息部分进行手动访问来查看值。
“添加服务引用”不支持 Web Services 描述语言 (WSDL) 导入元素
为具有导入元素的 WSDL 文件添加服务引用时,“添加服务引用”会失败。