带SoapHeader验证的WebServices

一般在项目中,制作的都是基于SOAP协议的webservices,其描述语言是WSDL。但是有时候在项目中,需要保证webservices的安全,需要对其进行进行验证,那么我们就要实现SoapHeader,具体的实现方式如下:

首先就是自定义一个类,继承自System.Web.Services.Protocols.SoapHeader ,然后在这个类中,通过暴露的公共属性和方法来进行校验。

其次就是在webservices主体方法中,添加对SoapHeader的验证的支持

最后直接在用户页面进行验证,调用方法即可。

首先,定义一个sSoapHeader类,暴露出其提供的公共验证字段,并提供验证方法:

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;

namespace  webServiceDemo
{
    
public   class  sSoapHeader:System.Web.Services.Protocols.SoapHeader
    {
        
private   string  _UserId  =   string .Empty;
        
private   string  _UserPwd  =   string .Empty;

        
public  sSoapHeader() { }

        
public   string  UserId
        {
            
get
            {
                
return  _UserId;
            }
            
set
            {
                _UserId 
=  value;
            }
        }

        
public   string  UserPwd
        {
            
get
            {
                
return  _UserPwd;
            }
            
set
            {
                _UserPwd 
=  value;
            }
        }

        
public   void  Initial( string  username,  string  password)
        {
            UserId 
=  username;
            UserPwd 
=  password;
        }

        
public   bool  IsValid( string  uid,  string  pwd,  out   string  msg)
        {
            msg 
=   "" ;
            
if  (uid  ==   " admin "   &&  pwd  ==   " admin888 " )
            {
                
return   true ;
            }
            
else
            {
                msg 
=   " 对不起,你无法调用 " ;
                
return   false ;
            }
        }
        
public   bool  IsValid( out   string  msg)
        {
            
return  IsValid(_UserId, _UserPwd,  out  msg);
        }

    }
}

其次就是在webservice主体中,添加对此验证方法的支持

 

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.Services;
using  System.Web.Services.Protocols;

namespace  webServiceDemo
{
    
///   <summary>
    
///  Service1 的摘要说明
    
///   </summary>
    [WebService(Namespace  =   " http://tempuri.org/ " )]
    [WebServiceBinding(ConformsTo 
=  WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(
false )]
    
//  若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    
//  [System.Web.Script.Services.ScriptService]
     public   class  Service1 : System.Web.Services.WebService
    {
        
public  sSoapHeader s  =   new  sSoapHeader();
        [SoapHeader(
" s " )]    // 这里就是添加验证方法的标志
        [WebMethod]
        
public   string  HelloWorld( int  a, int  b)
        {
            
string  msg  =   "" ;
            
if  ( ! s.IsValid( out  msg))
            {
                
return  msg;
            }
            
return  (a  +  b).ToString();
        }

       
    }
}

 

在上图中,我已经标志的很清楚了[SoapHeader("s")] 就是添加验证方法的标志。

最后就是在用户页面中进行调用,引用完毕后,需要对soapheader暴露的公共属性方法进行赋值判断,最后调用即可。只要验证正确,便可以正常调用,否则则提示没有权限:

 

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  WEB
{
    
public   partial   class  _Default : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            localhost.Service1 s 
=   new  WEB.localhost.Service1();
            localhost.sSoapHeader header 
=   new  WEB.localhost.sSoapHeader();
            header.UserId 
=   " admin " ;
            header.UserPwd 
=   " admin888 " ;
            s.sSoapHeaderValue 
=  header;
            Response.Write(s.HelloWorld(
2 , 1 ));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值