访问编排中的 SOAP 标头

可以在业务流程中访问已定义和未知的 SOAP 标头的上下文属性。 有关属性架构和上下文属性的详细信息,请参阅 属性架构

定义的 SOAP 标头上下文属性

在编排中定义的 SOAP 标头上下文属性需要一个属性架构。 属性架构必须具有目标命名空间 http://schemas.microsoft.com/BizTalk/2003/SOAPHeader,并且 属性架构基 属性设置为 MessageContextPropertyBase。 属性架构中的每个根元素名称必须与定义的 SOAP 标头的根元素名称匹配。 然后,可以使用属性架构的命名空间和属性名称来访问上下文属性的值。 属性架构的命名空间与上面列出的目标命名空间不同。 尽管属性架构的命名空间可以是任何字符串,但它通常默认为项目的名称。

以下示例演示如何访问属性架构命名空间、 SOAPHeader 和属性名称 OrigDest 的 SOAP 标头上下文属性:

stringVar = requestMessageInstance(SOAPHeader.OrigDest);  

注释

定义的 SOAP 标头被视为“in”或“out”标头。 如果向导为请求和响应消息定义了相同的 SOAP 标头,向导不会在响应中自动返回传入值。 必须将请求消息的 SOAP 标头上下文属性显式复制到响应消息的 SOAP 标头上下文属性。

复制传入消息的 SOAP 标头上下文属性

可以将传入消息的 SOAP 标头上下文属性复制到响应消息的同一 SOAP 标头上下文属性。

以下示例演示如何复制 SOAP 标头上下文属性:

ResponseMessageInstance(SOAPHeader.OrigDest) = RequestMessageInstance(SOAPHeader.OrigDest);  

为 SOAP 响应创建 SOAP 标头时,请确保正确创建 SOAP 标头。 SOAP 适配器不验证 SOAP 标头上下文属性的内容。 如果响应 SOAP 标头的值不正确,SOAP 适配器无法将响应消息发送到 Web 服务的使用者。

未知 SOAP 标头上下文属性

未知的 SOAP 标头上下文属性不需要属性架构。 可以访问此全局上下文属性 SOAP。UnknownHeaders

以下示例演示如何访问未知的 SOAP 标头上下文属性 SOAP。UnknownHeaders

stringVar = RequestMessageInstance(SOAP.UnknownHeaders);  

上下文属性中包含的值是包含 XML 数据的字符串。 访问此数据的最简单方法是在 消息分配表达式 形状中使用 BizTalk 表达式编辑器,并在 XmlDocument 中加载字符串,并使用 XPATH 查询访问特定字段。 有关在 BizTalk 表达式编辑器中创建 XML 文档的详细信息,请参阅 XLANG 语言

上下文属性与特定消息相关联。 消息引擎不会自动将已知 SOAP 标头的值从请求消息映射到响应消息。 为 Web 服务创建响应消息时,必须专门设置 SOAP 标头值。 以下命令是设置 SOAP 标头上下文属性的最简单方法:

ResponseMessageInstance(SOAPHeader.OrigDest) = "<?xml version="1.0" encoding="utf-16"?><OrigDest xmlns=\"http://SOAPHeaderSchemas.OrigDestSOAPHeader\"><Origination xmlns=\"\">Home</Origination><Destination xmlns=\"\">Work</Destination> </OrigDest>"  

还可以通过创建 XmlDocument 并将 XmlDocument 的字符串值写入上下文属性来实现此目的。

注释

如果 SOAP。UnknownHeaders 属性为 null,BizTalk 会自动将 SOAP 请求中收到的未知标头返回到 SOAP 响应。 如果 SOAP。响应消息上的 UnknownHeaders 上下文属性不为 null,则 BizTalk 会将该值返回到 SOAP 响应。

另请参阅

具有已发布 Web 服务的 SOAP 标头