zoukankan      html  css  js  c++  java
  • WebService开发(一) 如何使用Soap头

          平时写Web Service时经常会对Service的访问进行安全控制,方法很多,这里介绍一下如何用Soap头来进行控制的一例。       第一步,引用需要用到的名称空间

    using System; using System.Xml; using System.Xml.Serialization; using System.Web.Services; using System.Web.Services.Protocols;

                第二步,建立自定义的SoapHeader类MySoapHeader

    publicclass MySoapHeader : SoapHeader {     string _name;     string _passWord;     publicstring Name     {         get{ return _name; }         set{ _name = value; }     }     publicstring PassWord     {         get{ return _passWord; }         set{ _passWord = value; }     } }

          第三步,建立WebSerivce,MyService类有一个MySoapHeader类型的字段公共header,在客户调用CheckHeader之前需要给header付一个新实例,服务器端检验这个实例的成员信息。失败我们抛出一个SoapHeaderException,这个异常的新实例,这里调用两个参数的构造函数。第一个参数是自定义的异常原因,第二个参数我们用SoapException.ClientFaultCode表示客户的调用格式不正确或缺少必要的信息。

    [WebService(Namespace ="http://DavidFan.cnblogs.com")] publicclass MyService : System.Web.Services.WebService {     public MySoapHeader header;     [SoapHeader("header", Direction = SoapHeaderDirection.In)]     publicstring CheckHeader()     {         if (header ==null)         {             thrownew SoapHeaderException("认证失败", SoapException.ClientFaultCode);         }         else         {             if (header.Name !="admin"|| header.PassWord !="admin")             {                 thrownew SoapHeaderException("认证失败", SoapException.ClientFaultCode);             }         }         //业务逻辑.         return"Something done";     } }

          第四步,客户端进行调用,这里的MySoapHeader,和MyService类即为WSDL工具生成代理类,对应服务端的上两个类。我们首先new 一个MySoapHeader的新实例,然后付个Myservice的新实例的header字段,最后调用CheckHeader这个服务器的方法,CheckHeader方法的header!=null,接着进行Name和PassWord的验证。 客户端try-catch块内首先捕获SoapHeaderException(如果有的话)。然后捕获Exception。好了整个过程只需这几步。

    publicclass ServiceClient {     protectedvoid ClientMethod(string name, string passWord)     {         MySoapHeader h =new MySoapHeader();         h.Name = name;         h.PassWord = passWord;         MyService service =new MyService();         service.header = h;         try         {             string retval = service.CheckHeader();             Console.WriteLine("Return:"+ retval);         }         catch (SoapHeaderException soapEx)         {             Console.WriteLine("Soap Header Exception:"+ soapEx.Message);         }         catch (Exception ex)         {             Console.WriteLine("Exception:"+ ex.Message);         }     } }

          到些为止,利用Soap头的一例简单的介绍完了,扩展应用,就由大家来发挥吧!

  • 相关阅读:
    【LeetCode】17. Letter Combinations of a Phone Number
    【LeetCode】16. 3Sum Closest
    【LeetCode】15. 3Sum 三个数和为0
    【LeetCode】14. Longest Common Prefix 最长前缀子串
    【LeetCode】13. Roman to Integer 罗马数字转整数
    【LeetCode】12. Integer to Roman 整型数转罗马数
    【LeetCode】11. Container With Most Water
    【LeetCode】10. Regular Expression Matching
    Models of good programmer
    RSA Algorithm
  • 原文地址:https://www.cnblogs.com/altman29/p/2514107.html
Copyright © 2011-2022 走看看