文章目录
第三十七章 添加和使用自定义标题元素 - 自定义标头的继承
自定义标头的继承
如果创建此Web 服务的子类,该子类将继承不特定于方法的标头信息 — 包含在 <request> 或 <response> 元素中的标头信息,这些元素是 <parameters>. 的直接子元素。即使 SOAPMETHODINHERITANCE 为 0,情况也是如此。
示例
另一个示例如下:
XData service
{
<parameters xmlns="https://www.intersystems.com/configuration">
  <response>
    <header name="Header2" class="User.Header4" alias="Header4"/>
    <header name="Header3" class="User.Header3"/>
  </response>
  <method name="echoBase64">
    <request>
      <header name="Header2" class="User.Header4" alias="Header4"/>
      <Action>https://soapinterop.org/Round2Base.Service.echoBase64Request</Action>
    </request>
    <response>
      <header name="Header2" class="User.Header2" alias="Header2"/>
      <header name="IposTransportHeader" class="ipos.IposTransportHeader"/>
      <Action>https://soapinterop.org/Round2Base.Service.echoBase64Result</Action>
    </response>
  </method>
  <method name="echoString">
    <request>
      <Action>https://soapinterop.org/Round2Base.Service.echoStringRequest</Action>
    </request>
    <response>
      <Action>https://soapinterop.org/Round2Base.Service.echoStringAnswer</Action>
    </response>
  </method>
</parameters>
}
 
在 SOAPHEADERS 参数中指定支持的标头元素
 
指定支持的标头元素的旧方法是在 Web 服务或 Web 客户端类中包含 SOAPHEADERS 参数。
此参数必须等于以逗号分隔的标头规范列表。每个标头规范均具有以下格式:
headerName:headerPackage.headerClass
 
其中 headerName 是受支持标头的元素名称,headerPackage.headerClass 是代表该标头的类的完整包和类名称。例如:
Parameter SOAPHEADERS = "MyHeaderElement:Scenario1Client.MyHeaderElement" 
 
此列表标识了对此 Web 服务或客户端的 SOAP 请求中支持的所有标头,并指明了每个标头映射到的类。
如果使用此较旧的技术,请注意以下几点:
- 对于 
Web服务,此技术不会影响生成的WSDL。 - 无法为特定的 
Web方法指定不同的标头元素。 SOAP向导不再在生成的Web服务和客户端类中生成SOAPHEADERS参数。- 此技术已被弃用。
 
自定义标头的继承
如果创建此 Web 服务的子类,则该子类将继承 SOAPHEADERS 参数。即使 SOAPMETHODINHERITANCE 为 0,情况也是如此。
对于每个受支持的标头元素,服务或客户端都会创建相应标头类的实例,并将标头添加到入站标头数组,即 HeadersIn 属性。此属性是一个具有常用数组接口的数组(例如,SetAt()、Count() 和 GetAt() 方法)。然后,Web 服务或 Web 客户端可以根据需要对这些标头采取行动。
注意:header 元素命名空间不用于匹配列表中的 header 元素。但是,SOAP 消息中的 header 元素命名空间必须与 header 元素子类中的 NAMESPACE 参数指定的命名空间相同;否则,导入消息时会出现错误。










