zoukankan      html  css  js  c++  java
  • 如何处理来自 Web Service 客户端的未知 SOAP 标头

    处理来自 Web 服务客户端的未知 SOAP 标头

    1. 向实现 Web 服务的类添加类型为 SoapUnknownHeaderSoapHeader 或二者的数组的成员变量,以处理多个未知的 SOAP 标头。

      将该类型声明为 SoapUnknownHeader 的数组或单个实例,还可以使 SoapUnknownHeader 具有 Element 属性,从而获得额外的好处。 Element 属性属于 XmlElement 类型,它表示 SOAP 请求或 SOAP 响应的 Header 元素的 XML 文档。 因此,通过询问Element 属性,Web 服务方法就可以确定 SOAP 标头的名称以及 SOAP 标头传递的数据。

       
      public class MyWebService {
          public SoapUnknownHeader[] unknownHeaders;
      
      
       
      Public Class MyWebService
          Public unknownHeaders() As SoapUnknownHeader
      
    2. 向要处理每个未知 SOAP 标头的每个 Web 服务方法应用 SoapHeader 属性。

       
          
          [WebMethod]
          [SoapHeader("unknownHeaders")]
          public string MyWebMethod()
      
      
       
          <WebMethod, _
           SoapHeader("unknownHeaders") > _
          Public Function MyWebMethod() As String
       
      
    3. 添加代码以确定是否能够处理所有未知的 SOAP 标头。

      如果成员变量属于 SoapUnknownHeader 类型,则通过询问 Element 属性,Web 服务方法可以确定 SOAP 标头的名称以及 SOAP 标头传递的数据。 Element 属性的 Name 属性标识 SOAP 标头的名称。

       
             
             foreach (SoapUnknownHeader header in unknownHeaders) 
             {
               // Check to see if this a known header.
               if (header.Element.Name == "MyKnownHeader")
      
      
       
             Dim header As SoapUnknownHeader       
             For Each header In unknownHeaders
               ' Check to see if this is a known header.
               If (header.Element.Name = "MyKnownHeader") Then
      
    4. 对于表示未知 SOAP 标头的成员变量,如果它知道如何处理特定的 SOAP 标头,请将其 DidUnderstand 属性设置为 true

      如果 Web 服务方法确实处理未知的 SOAP 标头但未将 DidUnderstand 属性设置为 true,则会引发 SoapHeaderException。 有关更多详细信息,请参见处理 XML Web services 客户端所要求的 SOAP 标头

       
               // Check to see if this is a known header.
               if (header.Element.Name == "MyKnownHeader")
                     header.DidUnderstand = true;
               else
                   // For those headers that cannot be 
                   // processed, set DidUnderstand to false.
                   header.DidUnderstand = false;
               }
      
      
       
               ' Check to see if this a known header.
               If (header.Element.Name = "MyKnownHeader") Then
                     header.DidUnderstand = True
               Else
                   ' For those headers that cannot be 
                   ' processed, set DidUnderstand to false.
                   header.DidUnderstand = False
               End If
      
      Note注意:

      用 ASP.NET 创建的 Web 服务使用 DidUnderstand 属性与 Web 服务方法进行通信。 SOAP 规范中并没有此规定。 该属性的值不会出现在 SOAP 请求或 SOAP 响应的任何部分中。

      Note注意:

      当 Web 服务客户端使用 Web 服务描述语言工具 (Wsdl.exe) 生成代理类,而 Web 服务使用 SoapUnknownHeader 类型定义表示 SOAP 标头的成员变量时,将不会向代理类中添加对该 SOAP 标头的任何引用。 如果 Web 服务客户端决定将该 SOAP 标头添加到 SOAP 请求中,它们必须向调用适用的 Web 服务方法的方法添加成员变量并应用 SoapHeader 属性,从而来修改代理类。

  • 相关阅读:
    重构机房收费系统总结1之配置文件+反射+抽象工厂
    win7 下jenkins配置与使用
    ant-jmeter批量脚本
    ant批量运行Jmeter脚本遇到 Content is not allowed in prolog.问题及解决方案
    JMeter学习笔记--JMeter前置处理器
    JMeter学习笔记--详解JMeter定时器
    JMeter学习笔记--详解JMeter配置元件
    JMeter学习笔记--详解JMeter逻辑控制器
    JMeter学习笔记--JMeter监听器
    JMeter学习笔记--创建数据库测试计划
  • 原文地址:https://www.cnblogs.com/yangzhx/p/3602003.html
Copyright © 2011-2022 走看看