微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WebService开发二 如何使用Soap扩展 http://www.cnblogs.com/wayne-ivan/archive/2007/06/19/788541.html

 SOAP Extension(SOAP扩展)可以封装可重用的功能。比如 上一篇讲的通过Soap Header进行服务的访问控制。这篇随笔里我们要利用SOAP扩展做一下对利用Soap Header校验用户身份的封装和解决网友提出的明文传输身份信息不安全的问题。
      首先,介绍一下几个相关的类。System.Web.Services.Protocols名称空间下SoapExtension,SoapExtensionAttribute是两个抽象类,不能够实例化,我们要做的事情就是分别继承这两个抽象类,实现自定义类。SoapExtensionAttribute又继承自System.Attribute,说明它是一个Attribute(这个东西不太好翻译,有人译成属性之类,我考虑了一下,感觉翻译成标签更形象,为什么呢?我们用这种类时,一般会在类或方法等上方加[Attribute],这就有点像给东西贴一个标签,告诉别人这个有什么特征,作什么用途)。
      我们开始实现自定义的SoapExtension和SoapExtensionAttribute,下边是具体代码代码中用到了对称加密,我封装了一下MSDN里的提供的一个实现,可以下载源文件在这里 /Files/DavidFan/Encryptor.rar。需要引用的名称空间,其中包括我封装的加密类所在的名称空间

using@H_404_12@  System;

@H_404_12@ using@H_404_12@  System.Data;

@H_404_12@ using@H_404_12@  System.Configuration;

@H_404_12@ using@H_404_12@  System.Web;

@H_404_12@ using@H_404_12@  System.Web.Services.Protocols;

@H_404_12@ using@H_404_12@  David.Fan.Encrypt;@H_404_12@
      下边是自定义的MyExtensionAttribute类,[AttributeUsage(AttributeTargets.Method)]中AttributeTargets.Method是只可以对方法应用,当然你还可以根据Soap扩展的不同功能,设置其它的应用类型。

[AttributeUsage(AttributeTargets.Method)]

@H_404_12@ public@H_404_12@  @H_404_12@ class@H_404_12@  MyExtensionAttribute : SoapExtensionAttribute

@H_404_12@
      接下来是MyExtension类,继承自SoapExtension

public@H_404_12@  @H_404_12@ class@H_404_12@  MyExtension : SoapExtension

@H_404_12@
      最后一步如何应用Soap扩展。很简单只需[MyExtensionAttribute]即可。这里用到了SoapHeader,如果你对它不是很熟悉的话,可以参考我的 上一篇随笔。

public@H_404_12@  @H_404_12@ class@H_404_12@  MySoapHeader : SoapHeader

@H_404_12@

[WebService(Namespace @H_404_12@ =@H_404_12@  @H_404_12@ "@H_404_12@ http://DavidFan.cnblogs.com@H_404_12@ "@H_404_12@ )]

@H_404_12@ public@H_404_12@  @H_404_12@ class@H_404_12@  MyService : System.Web.Services.WebService

@H_404_12@

      CheckHeader方法的实现你可以和我上一篇的MyService的CheckHeader方法作一下对比。就看出来Soap扩展的一点好处了。客户端将身份信息加密传送。服务器端拿到加密串进行解密,然后校验,不匹配则摆出异常。      这里只是对Soap扩展使用的一个特别的简单的举例,当然你还可以发挥,比如压缩消息,日志记录,Trace之类,网上也有很多文章讲。谢谢大家!

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐