使用 SOAP 扩展修改 SOAP 消息
SOAP扩展允许通过更改往返于Web服务或Web服务客户端的SOAP消息来增加Web服务功能……
实现 SOAP 扩展
有两种方法可在客户端或服务器应用程序上运行 SOAP 扩展。首先,您可以配置应用程序以运行该扩展。要配置 SOAP 扩展以便可对所有 Web 服务上的所有 Web 方法(尤其是 vroot)运行,请编辑 Web.config 文件中的 <soapExtensionTypes> 元素部分。以下代码显示,type 属性值必须位于一行上并且包含扩展的完全限定名,而且还包含签名的程序集的版本、区域性和公钥标记。
| <configuration> <system.web> <webServices> <soapExtensionTypes> <add type="Contoso.MySoapExtension, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" priority="1" group="0"/> </soapExtensionTypes> </webServices> </system.web> </configuration> |
其次,您可以创建应用于 Web 服务方法的自定义属性。要创建自定义属性,请创建从 SoapExtensionAttribute 派生的类。有关创建自定义属性的详细信息,请参见如何:实现 SOAP 扩展。有关创建自定义属性的更多信息,请参见“创建自定义属性”。
注意
在实现 SOAP 扩展时,如果您的扩展使用 XmlTextReader 读取数据流,则有可能面临拒绝服务 (DOS) 攻击。防止此类攻击的一个方法是确保 ProhibitDtd 属性设置为 true。
优先级和优先级组
使用属性或配置,可以向 SOAP 扩展分配优先级,该优先级有助于确定当配置多个 SOAP 扩展以便使用 XML Web 服务方法时执行的相对顺序。SOAP 扩展的优先级越高,它的执行与通过网络发送或接收 SOAP 消息越近。SOAP 扩展属于三个优先级组中的任意一个。在每个组内,priority 属性区别每个成员。priority 属性越低,相对优先级就越高(0 是最高的)。
SOAP 扩展的三个相对优先级组是:使用属性配置的 SOAP 扩展和配置文件中指定的 group 设置为 0 或 1 的 SOAP 扩展。其优先级的顺序如下:
- 最高优先级组:在 group 设置为 0 的情况下使用配置文件配置的 SOAP 扩展。
- 中等优先级组:使用属性配置的 SOAP 扩展。
- 最低优先级组:在 group 设置为 1 的情况下使用配置文件配置的 SOAP 扩展。
下面的代码示例是一个配置文件,它指定 Logger.LoggerExtension SOAP 扩展在相对优先级组 0 中运行并具有优先级 1。
| <configuration> <system.web> <webServices> <soapExtensionTypes> <add type="Logger.LoggerExtension,logger" priority="1" group="0" /> </soapExtensionTypes> </webServices> </system.web> </configuration> |
- 本文关键词:

