zoukankan      html  css  js  c++  java
  • 实现带有身份验证的WebService

    找了一下关于Asp.NET Forms  WebService,大部分都是转贴“chinadhf”的下篇文章:
    使用ASP.Net Forms模式实现WebService身份验证

    其中提到:
    System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();

    MyService.WebService service 
    = new App.MyService.WebService();
    service.CookieContainer 
    = cookieContainer;

    但是,我怎么也没有找到代理实体的CookieContainer属性,惭愧!给各路牛人发邮件、回帖、留消息,都没有人答复,遗憾!!

    好在又从网上找到一些资料可以解决我的问题,虽然我也觉得不是最佳解决办法。现在共享出来:

    1、创建一个SoapHeader的派生类
     public class CredentialSoapHeader : SoapHeader
     {
      public string UserName
      {
       get;
       set;
      }

      public string Password
      {
       get;
       set;
      }
     }

    2、在需要验证的webService类里面添加验证属性
    3、在需要验证的Web方法上添加标签  [SoapHeader("Credentail")]
     public class Login : System.Web.Services.WebService
     {
      public CredentialSoapHeader Credentail
      {
       get;
       set;
      }

      [WebMethod]
      [SoapHeader("Credentail")]
      public string HelloWorld()
      {
       this.VerifyCredential(this);
       return "Welcome " + this.Credentails.UserName;
      }
      /// <summary>
      /// 验证是否合法
      /// </summary>
      /// <param name="s"></param>
      private string VerifyCredential(Login s)
      {
       if (s.Credentails == null || s.Credentails.UserName == null || s.Credentails.UserPassword == null)
       {
        return "验证失败:无用户认证信息";
       }

       //在这里可以进一步进行自定义的用户验证 
       return "OK";
      }
     }
    这样,在客户端代理实体调用该方法时,就需要提供一个CredentialSoapHeader 的对象了,在服务端的验证方法里,我们可以添加相应的身份验证机制。

  • 相关阅读:
    李宏毅机器学习课程笔记-6.1神经网络训练问题与解决方案
    PAT甲级1055The World's Richest
    PAT甲级1028List Sorting
    PAT甲级1025PAT Ranking
    PAT甲级1016Phone Bills
    五边形数
    组合计数
    [编程题] lc三数之和 (借助哈希表)
    [编程题] 基础:如何使用大顶堆和小顶堆找topN
    [编程题] lc [剑指 Offer 54二叉搜索树的第k大节点----或者是求第K小元素]
  • 原文地址:https://www.cnblogs.com/zhaoguan_wang/p/1270332.html
Copyright © 2011-2022 走看看