添加Soap头来增加Web Service的安全性

myService.asmx.cs

添加类:MyHeader 从 System.Web.Services.Protocols.SoapHeader继承

完整的代码如下


using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.Web;

using System.Web.Services;

//对soap Head引用添加的命名空间

using System.Web.Services.Protocols; 

 

namespace study

{

     
/// <summary>

     
/// myService 的摘要说明。

     
/// </summary>


     
//[WebService(Namespace="http://MyServer/MyWebServices/")]

     
public class myService : System.Web.Services.WebService

     
{

         
/// <summary>

         
/// Soap头实例

         
/// </summary>


         
public MyHeader myHeader=new MyHeader();

 

         
public myService()

         
{

              
//CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的

 

              InitializeComponent();

 

         }


 

         
组件设计器生成的代码

 

         
// WEB 服务示例

         
// HelloWorld() 示例服务返回字符串 Hello World

         
// 若要生成,请取消注释下列行,然后保存并生成项目

         
// 若要测试此 Web 服务,请按 F5 键

 

         [WebMethod]

         
public string HelloWorld()

         
{

              
return "Hello World";

         }


         [SoapHeader(
"myHeader")]

         [WebMethod(Description
="ddddddd",EnableSession=true)]

         
public string HelloWorld2(string contents)

         
{

              
string msg = "";

              
//验证是否有权访问

              
if(!myHeader.IsValid(out  msg))

                   
return msg;

              
return "Hello World:"+contents;

         }


     }


     
public class MyHeader :  System.Web.Services.Protocols.SoapHeader 

     
{

         
private string _UserID=string.Empty;

         
private string _PassWord=string.Empty;

 

         
/// <summary>

         
/// 构造函数

         
/// </summary>


         
public MyHeader()

         
{

 

         }


         
/// <summary>

         
/// 构造函数

         
/// </summary>

         
/// <param name="nUserID">用户ID</param>

         
/// <param name="nPassWord">加密后的密码</param>


         
public MyHeader(string nUserID,string nPassWord)

         
{

              Initial(nUserID,nPassWord);

         }


         

         
属性

         
方法 

}


 

}



通过soap调用的代码如下:


              // 在此处放置用户代码以初始化页面

              
//创建myService对象

              MyWebServer.myService service 
= new study.MyWebServer.myService();

              
//创建soap头对象

              MyWebServer.MyHeader header 
= new study.MyWebServer.MyHeader();

              
//设置soap头变量

              header.PassWord 
= "admin";

              header.UserID 
= "admin";

              service.MyHeaderValue 
= header;

              
//调用web 方法

            
this.Label1.Text = service.HelloWorld2("dob");

 


原文地址:https://www.cnblogs.com/engine1984/p/1038412.html