SoapHeader实践之客户端验证

原文:刘武|SoapHeader实践之客户端验证  

编写Webservice时经常需要对用户的身份进行认证,我们可以给用户一个令牌,然后在每个方法签名中增加该令牌做为参数,以此来验证用户的合 法性。但这杨就必须修改所有的方法签名,很显然是难以维护的。因此我们要尽量避免修改方法签名,而使用SoapHeader恰好可以满足我们的需求,通过 将令牌保存在SoapHeader类中来实现在客户端和服务端的传送。以下是具体的操作流程:

一 自定义SoapHeader类

public class MyHeader :SoapHeader
{
    public MyHeader() { }
    private string _token = "";
    public string Token
    {
        get { return _token; }
        set { _token = value; }
    }
}

注意一定要继承SoapHeader

二 编写Webservice

[WebService(Namespace = "http://www.liuwu.net/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
    public MyHeader header;
       [WebMethod]
    [SoapHeader("header")]
    public bool IsRightUser()
    {
        return CheckToken();
    }
    /// <summary>
    /// 验证令牌
    /// </summary>
    /// <remarks>
    ///此处仅供演示,根据实际情况可添加更加复杂的验证过程
    ///</remarks>
    /// <returns></returns>
    private bool CheckToken()
    {
        if (header != null && header.Token == "123")
        {
            return true;
        }
        return false;
    }
}

我们声明了MyHeader类的实例header,并且在IsRightUser函数中增加了SoapHeader属性,指明使用header来保存他的值。

三 客户端调用

新建winform应用程序,并添加web引用,引用名为:SoapHeaderTest,具体调用方法如下

SoapHeaderTest.MyHeader header =  new SoapHeaderTest.MyHeader();
header.Token = "123";
SoapHeaderTest.WebService ws =  new SoapHeaderTest.WebService();
ws.MyHeaderValue = header;
bool b = ws.IsRightUser();

注意必须给ws的MyHeaderValue赋值

你可能感兴趣的:(header)