SoapHeader 的作用是什么(转载)

SoapHeader  多数情况下用来传递用户身份验证信息,当然它的作用远不止如此,有待于在实际应用中发掘。当然也可以把用户名密码作为函数的参数传递给服务器端,但是这样没有单独的一个处理用户名密码的模块清晰。
而且 SoapHeader还有其他功能,可以在执行服务器端方法前进行一些预处理。

SoapHeader  缺省情况下由客户端代理对象发送给  WebService,当然我们可以通过  WebMethodAttribute.Direction  来改变传送方向。

SoapHeader  使用步骤:

(1)  创建继承自  System.Web.WebServices. SoapHeader  的自定义  SoapHeader  类型。
(2)  在  WebService  中创建拥有  public  访问权限的自定义  SoapHeader  字段。
(3)  在需要使用  SoapHeader  的  WebMethod  上添加  SoapHeaderAttribute 访问特性。SoapHeaderAttribute  构造必须指定  memberName  参数,就是我们在第二步中申明的字段名称。
(4)  生成器会自动为客户端生成同名的自定义  SoapHeader  类型,只不过比起我们在  WebService  端创建的要复杂一些。同时还会为代理类型添加一个  soapheaderValue  属性。

在下面的演示代码,客户端将传递一个自定义  MyHeader  到  WebService。请注意,我们尽管在  WebService 中申明了  MyHeader  字段,但并没有创建对象实例,这是因为客户端传递过来的  XML  中包含了  SoapHeader 信息,基础结构会自动解析并创建对象实例,然后赋值给  my  字段。至于客户端,自然需要创建一个  MyHeader  对象实例,并赋值给 WebService.MyHeaderValue  属性。SoapHeaderAttribute.Direction  缺省就是 In,下面例子中的  "Direction  =  SoapHeaderDirection.In "  可以省略。

WebServices.cs
public  class  MyHeader  :  SoapHeader
{
    public  string  Username;
    public  string  Password;
}

[WebService(Namespace  =  "http://www.rainsts.net/ ",  Description= "我的Web服务 ")]
[WebServiceBinding(ConformsTo  =  WsiProfiles.BasicProfile1_1)]
public  class  WebService  :  System.Web.Services.WebService 
{
    public  MyHeader  my;

    [WebMethod]
    [ SoapHeader( "my ",  Direction  =  SoapHeaderDirection.In)]
    public  void  TestSoapHeadIn()
    {
        System.Diagnostics.Debug.Write(my.Username);
        System.Diagnostics.Debug.Write(my.Password);
    }
}

Client.cs
WebService  ws  =  new  WebService();

MyHeader  head  =  new  MyHeader();
head.Username  =  "u2 ";

head.Password  =  "p2 ";

ws.MyHeadValue  =  head;
ws.TestSoapHeadIn();

我们改写一下,将传递方向改为从  WebService  到客户端。自然我们需要调整  "Direction  = SoapHeaderDirection.Out ",在  WebMethod  中我们还必须创建  MyHeader 实例,因为这次我们不会接受到客户端传递的  SoapHeader  了。客户端代理对象调用  WebMethod  后就可以使用 MyHeaderValue  属性访问其内容了。

WebServices.cs
public  class  MyHeader  :  SoapHeader
{
    public  string  Username;
    public  string  Password;
}

[WebService(Namespace  =  "http://www.rainsts.net/ ",  Description= "我的Web服务 ")]
[WebServiceBinding(ConformsTo  =  WsiProfiles.BasicProfile1_1)]
public  class  WebService  :  System.Web.Services.WebService 
{
    public  MyHeader  my;

    [WebMethod]
    [ SoapHeader( "my ",  Direction  =  SoapHeaderDirection.Out)]
    public  void  TestSoapHeadOut()
    {
        my  =  new  MyHeader();
        my.Username  =  "u1 ";
        my.Password  =  "p1 ";
    }
}

Client.cs
WebService  ws  =  new  WebService();
ws.TestSoapHeadOut();

Console.WriteLine(ws.MyHeaderValue.Username);

Console.WriteLine(ws.MyHeaderValue.Password);



SOAP 标头提供了一种方法,用于将数据传递到 XML Web services 方法或从 XML Web services方法传递数据,条件是该数据不直接与 XML Web services 方法的主功能相关。例如,一个 XML Web services可能包含若干个 XML Web services 方法,而每个方法都需要自定义的身份验证方案。您不用将参数添加到每个需要自定义身份验证方案的XML Web services 方法,而可以将引用从 SoapHeader 派生的类的 SoapHeaderAttribute 应用于每个 XML Web services 方法。从 SoapHeader 派生的类的实现处理该自定义身份验证方案。按照此方式,XML Web services 方法使用 SOAP 标头来仅实现特定于它的功能并添加其他功能。

下面的列表概述接收和处理 SOAP 标头的基本步骤:

  1. 创建一个从 SoapHeader 派生的类,表示传入 SOAP 标头的数据。

  2. 将一个成员添加到实现 XML Web services 的类或 XML Web services 客户端代理类(它们属于在第一步创建的类型)。

  3. 指定第二步中在 MemberName 属性中创建的成员,将 SoapHeaderAttribute 应用于 XML Web services 方法或代理类中的对应方法。

  4. 在 XML Web services 方法或 XML Web services 客户端代码中访问 MemberName 属性,以处理在 SOAP 标头中发送的数据。

    实例:
    下面的 MyWebService XML Web services 定义 MyHeader SOAP 标头,并要求它随同对 MyWebMethod XML Web services 方法的任意调用一起发送。另外,MyWebMethod 还接收 MyHeader SOAP 标头以外的任何 SOAP 标头。

    SoapHeader 的作用是什么(转载) - allan - 我的博客
    SoapHeader 的作用是什么(转载) - allan - 我的博客<%@ WebService Language="C#" Class="MyWebService"%>
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    using System.Web.Services;
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    using System.Web.Services.Protocols;
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    using System.Xml;
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    using System;
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    // Define a SOAP header by deriving from the SoapHeader base class.
    SoapHeader 的作用是什么(转载) - allan - 我的博客

    SoapHeader 的作用是什么(转载) - allan - 我的博客
    public class MyHeader : SoapHeader {
    SoapHeader 的作用是什么(转载) - allan - 我的博客    
    public string MyValue;
    SoapHeader 的作用是什么(转载) - allan - 我的博客}

    SoapHeader 的作用是什么(转载) - allan - 我的博客
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    public class MyWebService {
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    SoapHeader 的作用是什么(转载) - allan - 我的博客    
    public MyHeader myHeader;
    SoapHeader 的作用是什么(转载) - allan - 我的博客    
    // Receive all SOAP headers besides the MyHeader SOAP header.
    SoapHeader 的作用是什么(转载) - allan - 我的博客
        public SoapUnknownHeader[] unknownHeaders;
    SoapHeader 的作用是什么(转载) - allan - 我的博客 
    SoapHeader 的作用是什么(转载) - allan - 我的博客    [WebMethod]
    SoapHeader 的作用是什么(转载) - allan - 我的博客    [SoapHeader(
    "myHeader", Direction=SoapHeaderDirection.InOut)]
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    SoapHeader 的作用是什么(转载) - allan - 我的博客    
    //Receive any SOAP headers other than MyHeader.
    SoapHeader 的作用是什么(转载) - allan - 我的博客
        [SoapHeader("unknownHeaders",Required=false)]
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    SoapHeader 的作用是什么(转载) - allan - 我的博客    
    public string MyWebMethod() {
    SoapHeader 的作用是什么(转载) - allan - 我的博客
    SoapHeader 的作用是什么(转载) - allan - 我的博客       
    foreach (SoapUnknownHeader header in unknownHeaders) {
    SoapHeader 的作用是什么(转载) - allan - 我的博客           
    // Perform some processing on the header.
    SoapHeader 的作用是什么(转载) - allan - 我的博客
           if (header.Element.Name == "MyKnownHeader")
    SoapHeader 的作用是什么(转载) - allan - 我的博客               header.DidUnderstand 
    = true;
    SoapHeader 的作用是什么(转载) - allan - 我的博客       
    else
    SoapHeader 的作用是什么(转载) - allan - 我的博客                
    // For those headers that cannot be  
    SoapHeader 的作用是什么(转载) - allan - 我的博客                
    // processed, set the DidUnderstand property to false.
    SoapHeader 的作用是什么(转载) - allan - 我的博客
                    header.DidUnderstand = false;
    SoapHeader 的作用是什么(转载) - allan - 我的博客       }

    SoapHeader 的作用是什么(转载) - allan - 我的博客       
    return "Hello";
    SoapHeader 的作用是什么(转载) - allan - 我的博客    }

    SoapHeader 的作用是什么(转载) - allan - 我的博客}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值