规划使用 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 序列化,才能使其成为消息部分类型。
注意
支持数据类型 XmlDocument 和 DataSet,虽然不是 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) 。
属性规则
如果在业务流程或接收管道的自定义管道组件中设置配置属性,则需遵循下列规则:
如果将消息发送到静态发送端口,则属性值将被为该发送端口配置的值覆盖。
如果将消息发送到动态发送端口,则不会覆盖属性值。
如果在发送管道的自定义管道组件中设置配置属性,则需遵循下列规则:
无论将消息发送到静态发送端口还是动态发送端口,都不会覆盖属性值。 换言之,无论在哪里设置配置属性,发送管道组件都会将其覆盖。
有关自定义管道组件的详细信息,请参阅 开发自定义管道组件 (https://go.microsoft.com/fwlink/?LinkId=155769) 。
有关 SOAP 发送适配器的配置属性的详细信息,请参阅 如何动态设置已使用 Web 服务的 URI (https://go.microsoft.com/fwlink/?LinkID=155768) 。
向包含多根架构的已使用 Web 服务添加 Web 引用将导致编译错误
如果为派生自已发布 BizTalk 业务流程的 Web 服务添加对项目的 Web 引用,并且业务流程包含具有多个根的架构,则在编译项目时将发生错误。 如果给项目添加的 Web 引用派生自已发布的 BizTalk 业务流程,需确保业务流程不包含任何多根架构。
使用 TypedDataSets 作为 Web 方法的参数
为支持将 TypedDataSets 用作 Web 方法的参数,需要执行以下操作:
将 Web 引用添加到 C# 项目,然后生成代理。
创建 SOAP 发送端口并在发送端口上指定该代理,然后选择方法。
在业务流程中定义后期绑定端口和消息类型。 对于大多数不需要属性提升或可分辨字段访问的情况,可以将类型定义为 XMLDocument。 为该类型选择直通管道。
在 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 中的 RequestNamespace 和 ResponseNamespace 属性。
Web Services 必须符合 Web Services 互操作性 (WSI) 基本配置文件版本 1.1。
添加 Web 引用不支持 Web 服务描述语言 (WSDL) Import 元素
在为具有导入元素的 WSDL 文件添加 Web 引用时,“添加 Web 引用”会失败。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈