在业务流程中访问 SOAP 标头

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

已定义的 SOAP 标头上下文属性

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

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

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。Soap.unknownheaders

下面的示例演示如何访问未知的 SOAP 标头上下文属性 soap。Soap.unknownheaders

stringVar = RequestMessageInstance(SOAP.UnknownHeaders);  

上下文属性中包含的值是包含 XML 数据的字符串。 访问此数据的最简单方法是在 消息赋值表达式 形状中使用 BizTalk 表达式编辑器,并在 xml 中加载字符串并使用 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>"  

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

注意

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

另请参阅

SOAP 标头与已发布的 Web 服务