微软为了应用新的web service协议而提供的.net类库,即Wse。
这些新的的协议包括:WS-Security,WS-SecureConversation,WS-Trust,WS-Addressing。
1 结构
Wse是应用这些新协议的引擎。
WS-Security指明了出站时对soap的header和body进行加密,入站时对其进行解密。
这个功能被封装在output filters和input filters中,
1.1 在客户端工作的Wse
客户端的input output filters 的功能是在WebServicesClientProtocol中实现的。
WebServicesClientProtocol扩展了System.Web.Services.SoapHttpClientProtocol。
用Wse的时候要把客户端的每个proxy都继承WebServicesClientProtocol。
最好的方法是用WSE Settings 3.0 Tool。
WebServicesClientProtocol的功能是用System.Net中的两个通信类WebRequest(sent soap request) and WebResponse(receive soap response)来实现的。
WebRequest可以将包含soap message的请求流转换成soap信封,这个信封其实就是System.Xml.XmlDocument的扩展。
然后将这个soap信封通过output filters的过滤链传送给服务器端。每一个outfilter都可以任意修改request中的数据,比如,添加soap协议的header或加密soap的body。
Filter的设置和行为是受一个和soap消息有关的policy控制的,这个policy包含了一些事先定好的policy assertion(声明)。一个assertion定义了一组input output filters来控制soap message在客户端和服务器端的传输。
WebResponse的行为和WebRequest正好相反。它将包含soap message的response流转换成SoapEnvelope的一个实例,然后通过input filters过滤链接受服务器的响应。每一个filter都可以任意处理response的数据。比如,验证协议header的有效性或对message body的解密等等。
WebServicesClientProtocol封装了WebRequest和WebResposne的功能,所以不必直接处理这两个类。当你需要处理关于请求或相应的message的协议的属性的时候,可以用WebServicesClientProtocol的两个属性RequestSoapContext和ResponseSoapContext这两个属性都是SoapContext类型的,分别对应着下一个将要传出的信息和最后一个受到的信息的协议属性。
1.2 在服务器端工作的Wse
服务器段的功能是封装在WseProtocolFactory中的。
WseProtocolFactory将request的信息拷到内存中,在并行化到每个方法的input的参数时用input filters来处理这些信息。然后再在开辟一片内存,来存放每个方法序列化之后的输出参数。然后经过output filters处理之后,发送出去。
要在服务器端web.config中配置WseProtocolFactory。特别是<soapServerProtocolFactory> 。