WebService开发(一) 如何使用Soap头 http://www.cnblogs.com/wayne-ivan/archive/2007/06/19/788539.html
2007-09-18 15:26
906 查看
平时写Web Service时经常会对Service的访问进行安全控制,方法很多,这里介绍一下如何用Soap头来进行控制的一例。
第一步,引用需要用到的名称空间
using System;
using System.Xml;
using System.Xml.Serialization;
using System.Web.Services;
using System.Web.Services.Protocols;
第二步,建立自定义的SoapHeader类MySoapHeader
public class MySoapHeader : SoapHeader
{
string _name;
string _passWord;
public string Name
{
get
{ return _name; }
set
{ _name = value; }
}
public string PassWord
{
get
{ return _passWord; }
set
{ _passWord = value; }
}
}
第三步,建立WebSerivce,MyService类有一个MySoapHeader类型的字段公共header,在客户调用CheckHeader之前需要给header付一个新实例,服务器端检验这个实例的成员信息。失败我们抛出一个SoapHeaderException,这个异常的新实例,这里调用两个参数的构造函数。第一个参数是自定义的异常原因,第二个参数我们用SoapException.ClientFaultCode表示客户的调用格式不正确或缺少必要的信息。
[WebService(Namespace = "http://DavidFan.cnblogs.com")]
public class MyService : System.Web.Services.WebService
{
public MySoapHeader header;
[SoapHeader("header", Direction = SoapHeaderDirection.In)]
public string CheckHeader()
{
if (header == null)
{
throw new SoapHeaderException("认证失败", SoapException.ClientFaultCode);
}
else
{
if (header.Name != "admin" || header.PassWord != "admin")
{
throw new SoapHeaderException("认证失败", SoapException.ClientFaultCode);
}
}
//业务逻辑
.
return "Something done";
}
}
第四步,客户端进行调用,这里的MySoapHeader,和MyService类即为WSDL工具生成代理类,对应服务端的上两个类。我们首先new 一个MySoapHeader的新实例,然后付个Myservice的新实例的header字段,最后调用CheckHeader这个服务器的方法,CheckHeader方法的header!=null,接着进行Name和PassWord的验证。
客户端try-catch块内首先捕获SoapHeaderException(如果有的话)。然后捕获Exception。好了整个过程只需这几步。
public class ServiceClient
{
protected void 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头的一例简单的介绍完了,扩展应用,就由大家来发挥吧!
第一步,引用需要用到的名称空间
using System;
using System.Xml;
using System.Xml.Serialization;
using System.Web.Services;
using System.Web.Services.Protocols;
第二步,建立自定义的SoapHeader类MySoapHeader
public class MySoapHeader : SoapHeader
{
string _name;
string _passWord;
public string Name
{
get
{ return _name; }
set
{ _name = value; }
}
public string PassWord
{
get
{ return _passWord; }
set
{ _passWord = value; }
}
}
第三步,建立WebSerivce,MyService类有一个MySoapHeader类型的字段公共header,在客户调用CheckHeader之前需要给header付一个新实例,服务器端检验这个实例的成员信息。失败我们抛出一个SoapHeaderException,这个异常的新实例,这里调用两个参数的构造函数。第一个参数是自定义的异常原因,第二个参数我们用SoapException.ClientFaultCode表示客户的调用格式不正确或缺少必要的信息。
[WebService(Namespace = "http://DavidFan.cnblogs.com")]
public class MyService : System.Web.Services.WebService
{
public MySoapHeader header;
[SoapHeader("header", Direction = SoapHeaderDirection.In)]
public string CheckHeader()
{
if (header == null)
{
throw new SoapHeaderException("认证失败", SoapException.ClientFaultCode);
}
else
{
if (header.Name != "admin" || header.PassWord != "admin")
{
throw new SoapHeaderException("认证失败", SoapException.ClientFaultCode);
}
}
//业务逻辑
.
return "Something done";
}
}
第四步,客户端进行调用,这里的MySoapHeader,和MyService类即为WSDL工具生成代理类,对应服务端的上两个类。我们首先new 一个MySoapHeader的新实例,然后付个Myservice的新实例的header字段,最后调用CheckHeader这个服务器的方法,CheckHeader方法的header!=null,接着进行Name和PassWord的验证。
客户端try-catch块内首先捕获SoapHeaderException(如果有的话)。然后捕获Exception。好了整个过程只需这几步。
public class ServiceClient
{
protected void 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头的一例简单的介绍完了,扩展应用,就由大家来发挥吧!
相关文章推荐
- WebService开发(二) 如何使用Soap扩展 http://www.cnblogs.com/wayne-ivan/archive/2007/06/19/788541.html
- 使用Windows Azure Mobile Service开发Windows Phone 8 App【转http://www.cnblogs.com/dlbrant/archive/2013/04/02/2996627.html】
- .Net中的设计模式——从实例谈OOP、工厂模式和重构 http://www.cnblogs.com/wayne-ivan/archive/2006/09/07/496920.html
- 使用DotMSN 2.0开发MSN机器人 http://www.cnblogs.com/hjf1223/archive/2008/01/16/dotmsn_robot.html
- 网上下载和上传数据 http://www.cnblogs.com/wayne-ivan/archive/2007/05/23/756384.html
- 使用DotMSN 2.0开发MSN机器人 http://www.cnblogs.com/hjf1223/archive/2008/01/16/dotmsn_robot.html
- 关于ResolveClientUrl和ResolveUrl的使用 问题 (http://www.cnblogs.com/borllor/archive/2008/02/25/1081037.html)
- 如何正确使用事件探察器解决性能问题(http://www.cnblogs.com/tom-fu/archive/2008/06/25/1146934.html#1235440)
- 该如何加载google-analytics(或其他第三方)的JS (转自http://www.cnblogs.com/BearsTaR/archive/2010/05/12/best_use_google_analytics.html)
- JQuery上传插件Uploadify使用详解 http://www.cnblogs.com/oec2003/archive/2010/01/06/1640027.html
- linux下select使用--转载http://www.cnblogs.com/moonvan/archive/2012/05/26/2518881.html
- 一步一步开发自己的Openfire插件http://www.cnblogs.com/hoojo/archive/2013/03/07/2947502.html
- 在Asp.net MVC中使用Asp.net Ajax --转载http://www.cnblogs.com/Nimeux/archive/2008/08/17/1269907.html
- XPath语法 在C#中使用XPath示例 【转http://www.cnblogs.com/yukaizhao/archive/2011/07/25/xpath.html】非常详细的文章
- linux下使用tar命令 (转至http://www.cnblogs.com/li-hao/archive/2011/10/03/2198480.html)
- android开发配置(转自http://www.cnblogs.com/qinpengming/archive/2011/10/19/2217948.html)
- 使用XMLHTTP Request Object获取服务器数据 (转http://www.cnblogs.com/birdshome/archive/2004/12/26/82238.html)
- Log4Net使用指南 (转自 http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html)
- 转载TortoiseSVN的使用详解3(http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html)
- 使用t-sql从身份证号中提取生日(转自:http://www.cnblogs.com/yukaizhao/archive/2008/05/22/sql_getbirthday_from_id.html)