• 给Web Service添加身份验证
  • 蓝色彼岸 发表于 2014/12/17 18:47:00 | 分类标签: SOAP WebService 安全认证
  • myService.asmx.cs

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

    完整的代码如下

    1. using System;  
    2. using System.Collections;  
    3. using System.ComponentModel;  
    4. using System.Data;  
    5. using System.Diagnostics;  
    6. using System.Web;  
    7. using System.Web.Services;  
    8. //对soap Head引用添加的命名空间  
    9.   
    10. using System.Web.Services.Protocols;   
    11. namespace study  
    12. {  
    13.   
    14.      /// <summary>  
    15.   
    16.      /// myService 的摘要说明。  
    17.      /// </summary>  
    18.      //[WebService(Namespace="http://MyServer/MyWebServices/")]  
    19.      public class myService : System.Web.Services.WebService  
    20.      {  
    21.          /// <summary>  
    22.   
    23.          /// Soap头实例  
    24.          /// </summary>  
    25.          public MyHeader myHeader=new MyHeader();  
    26.          public myService()  
    27.          {  
    28.   
    29.               //CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的  
    30.               InitializeComponent();  
    31.          }  
    32.          #region 组件设计器生成的代码  
    33.           //Web 服务设计器所必需的  
    34.          private IContainer components = null;  
    35.   
    36.                      
    37.          /// <summary>  
    38.          /// 设计器支持所需的方法 - 不要使用代码编辑器修改  
    39.          /// 此方法的内容。  
    40.          /// </summary>  
    41.   
    42.          private void InitializeComponent()  
    43.          {  
    44.          }  
    45.   
    46.          /// <summary>  
    47.          /// 清理所有正在使用的资源。  
    48.   
    49.          /// </summary>  
    50.   
    51.          protected override void Dispose( bool disposing )  
    52.          {  
    53.               if(disposing && components != null)  
    54.   
    55.               {  
    56.                    components.Dispose();  
    57.               }  
    58.               base.Dispose(disposing);           
    59.          }  
    60.  
    61.           
    62.  
    63.          #endregion  
    64.          // WEB 服务示例  
    65.          // HelloWorld() 示例服务返回字符串 Hello World  
    66.          // 若要生成,请取消注释下列行,然后保存并生成项目  
    67.   
    68.          // 若要测试此 Web 服务,请按 F5 键  
    69.   
    70.          [WebMethod]  
    71.          public string HelloWorld()  
    72.         {  
    73.   
    74.               return "Hello World";  
    75.   
    76.          }  
    77.          [SoapHeader("myHeader")]  
    78.          [WebMethod(Description="ddddddd",EnableSession=true)]  
    79.          public string HelloWorld2(string contents)  
    80.   
    81.          {  
    82.   
    83.               string msg = "";  
    84.               //验证是否有权访问  
    85.               if(!myHeader.IsValid(out  msg))  
    86.                    return msg;  
    87.   
    88.               return "Hello World:"+contents;  
    89.          }  
    90.      }  
    91.   
    92.      public class MyHeader :  System.Web.Services.Protocols.SoapHeader   
    93.   
    94.      {  
    95.   
    96.          private string _UserID=string.Empty;  
    97.          private string _PassWord=string.Empty;  
    98.          /// <summary>  
    99.   
    100.          /// 构造函数  
    101.   
    102.          /// </summary>  
    103.          public MyHeader()  
    104.          {  
    105.    
    106.          }  
    107.   
    108.          /// <summary>  
    109.          /// 构造函数  
    110.          /// </summary>  
    111.          /// <param name="nUserID">用户ID</param>  
    112.          /// <param name="nPassWord">加密后的密码</param>  
    113.   
    114.          public MyHeader(string nUserID,string nPassWord)  
    115.          {  
    116.               Initial(nUserID,nPassWord);  
    117.          }  
    118.           
    119.  
    120.          #region 属性  
    121.          /// <summary>  
    122.          /// 用户名  
    123.          /// </summary>  
    124.          public string UserID  
    125.   
    126.          {  
    127.              get{return _UserID;}  
    128.               set{_UserID=value;}  
    129.          }  
    130.          /// <summary>  
    131.          /// 加密后的密码  
    132.          /// </summary>  
    133.          public string PassWord  
    134.          {  
    135.               get{return _PassWord;}  
    136.               set{_PassWord=value;}  
    137.          }  
    138.          #endregion  
    139.          #region 方法  
    140.          /// <summary>  
    141.          /// 初始化  
    142.          /// </summary>  
    143.          /// <param name="nUserID">用户ID</param>  
    144.          /// <param name="nPassWord">加密后的密码</param>  
    145.          public void Initial(string nUserID,string nPassWord)  
    146.          {  
    147.               UserID=nUserID;  
    148.               PassWord=nPassWord;  
    149.          }  
    150.   
    151.          /// <summary>  
    152.          /// 用户名密码是否正确  
    153.          /// </summary>  
    154.          /// <param name="nUserID">用户ID</param>  
    155.          /// <param name="nPassWord">加密后的密码</param>  
    156.          /// <param name="nMsg">返回的错误信息</param>  
    157.          /// <returns>用户名密码是否正确</returns>  
    158.          public bool IsValid(string nUserID,string nPassWord,out string nMsg)  
    159.          {  
    160.               nMsg="";  
    161.               try  
    162.               {  
    163.                    //判断用户名密码是否正确   
    164.                    if(nUserID == "admin" && nPassWord == "admin"){  
    165.                        return true;  
    166.                    }  
    167.                    else  
    168.                    {  
    169.                        nMsg="对不起,你无权调用此Web服务,可能有如下原因:\n 1.您的帐号被管理员禁用。\n 2.您的帐号密码不正确";  
    170.                        return false;  
    171.                    }  
    172.   
    173.               }  
    174.               catch  
    175.               {  
    176.                    nMsg="对不起,你无权调用此Web服务,可能有如下原因:\n 1.您的帐号被管理员禁用。\n 2.您的帐号密码不正确";  
    177.                    return false;  
    178.               }  
    179.          }  
    180.          /// <summary>  
    181.          /// 用户名密码是否正确  
    182.          /// </summary>  
    183.   
    184.          /// <returns>用户名密码是否正确</returns>  
    185.          public bool IsValid(out string nMsg)  
    186.          {  
    187.               return IsValid(_UserID,_PassWord,out nMsg);  
    188.          }  
    189.          #endregion   
    190. }  
    191. }  

    通过soap调用的代码如下:

    1.   // 在此处放置用户代码以初始化页面  
    2.   //创建myService对象  
    3.   MyWebServer.myService service = new study.MyWebServer.myService();  
    4.   //创建soap头对象  
    5.   MyWebServer.MyHeader header = new study.MyWebServer.MyHeader();  
    6.   //设置soap头变量  
    7.   header.PassWord = "admin";  
    8.   header.UserID = "admin";  
    9.   service.MyHeaderValue = header;  
    10.   //调用web 方法  
    11. this.Label1.Text = service.HelloWorld2("dob");  


     

  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:蓝色彼岸
  • 加入时间:2013/5/14 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮