随笔 - 394  文章 - 0  评论 - 946  阅读 - 143万 

一般在项目中,制作的都是基于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));
        }
    }
}
复制代码
posted on   程序诗人  阅读(3926)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示