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 属性,从而来修改代理类。

  • 相关阅读:
    Laravel5如何向闭合函数内传递参数 where function 传参
    laraveladmin省市区三级联动
    laravel中间件失效,配置文件重新加载
    Laravel-admin 加载视图后,blade 模板 JS 失效
    laravel-admin Field type [editor] does not exist.
    laravel-admin 表单提交报错
    laravel-admin利用ModelTree实现对分类信息的管理
    laravel-admin后台框架基本使用
    C#模版学习研究
    github下载下来的C#控制台小游戏[含源码]
  • 原文地址:https://www.cnblogs.com/yangzhx/p/3602003.html
Copyright © 2011-2022 走看看