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头的一例简单的介绍完了,扩展应用,就由大家来发挥吧!

  • 相关阅读:
    arcgis10.2转shp文件中文乱码问题解决方案
    Android Context作为参数传递this
    andriod inputbox
    andriod inputType
    《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)
    终于理解了什么是LGPL
    产品经理如何与强势的技术沟通? 技术比较有资历,会以技术无法实现等方面的原因拒绝处理产品提出的需求。 你们是否遇到这样的技术? 产品懂技术的话,是不是会好一些,因为可以和技术说“行话”了,并且产品懂技术就不会被忽悠了。
    Core Dump总结
    LIBRARY_PATH是编译时候用的,LD_LIBRARY_PATH是程序运行是使用的
    如何禁止C++默认成员函数
  • 原文地址:https://www.cnblogs.com/altman29/p/2514107.html
Copyright © 2011-2022 走看看