在业务流程中访问 SOAP 标头

对于已定义的和未知的 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 Services 的使用者。

未知的 SOAP 标头上下文属性

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

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

stringVar = RequestMessageInstance(SOAP.UnknownHeaders);  

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

上下文属性与某一特定消息关联。 消息引擎不会自动将请求消息中的已知 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 响应。

另请参阅

SOAP 标头与已发布的 Web 服务