WSE 3.0 文档翻译:WSE架构

  作者:jillzhang
声明:第一次试着翻译文档,英语水平很菜,大家辩证着看

   做为最重要的部分,WSE是为Soap消息提供扩展的引擎。它能够在在发出的消息中写Soap头信息和在收到的信息中读Soap头信息,它也需要传输Soap体-比如用WS-Security 规范来加密发送数据和解密接收数据。这个功能被封装成两个过滤器:一部分用于发送数据,一部分用于接收数据。所有离开进程的消息-客户端请求消息和服务端响应消息都是用发送过滤,所有进入进程的消息-服务端收到请求和客户端收到响应都使用接收过滤。下面的关系图表明了WSE的结构:

 


和Asp.Net Xml Web Service基础结构一样,WSE过滤器是被集成在WSE的Soap消息中的

与Asp.Net Xml Web Service代理(发送端)进行集成

WSE的发送和接受过滤器是通过一个名为WebServicesClientProtocol的类来暴露给Asp.Net Xml Web Service客户端的,这个新的代理基类扩展了原来的代理基类:System.Web.Services.SoapHttpClientProtocol。新的代理基类使得无论何时在客户端发送消息的时候对交换的消息进行过滤,为了使用WSE,必须将原来的代理基类设置为WebServicesClientProtocol,为了简化操作步骤,可以使用WSE中的工具

WebServicesClientProtocol是实现了两个标准的System.Net通讯类:WebRequest和WebResponse。在更高级别上,WebRequest负责发送数据,WebResponse用于接收数据。

WebRequest实例将包含着Soap消息的流数据放入一个叫SoapEnvelope类的实例中,这个类是对标准.Net Dom API:System.Xml.XmlDocument 的扩

展,当通过发送过滤器的时候,过滤器有机会对每条请求数据做任意的修改。通常情况下是增加消息头,有时也更改消息头,比如加密消息体数据。

过滤器的动作取决于对Soap消息的声明性的策略,这些策略有一些有序的声明组成,这些生命定义了一组接受或者发送的过滤器,每个发送过滤器策略声明都被传递给策略规范中的SoapEnvelope。

下面的关系图说明Soap消息如何通过一系列的过滤器

 


WebResponse的操作与WebRequest相反,它从Soap信息中获取数据流并将其封装在名为SoapEnvelope的对象实例中,然后传递给接收过滤器。每个接收过滤器都有机会对响应消息做任意的修改.接收过滤器验证消息头部和发送过滤器对Soap体进行相反操作(如解密),和WebRequest一样,WebResponse也是通过声明性策略来定义的。

下面的关系图说明响应数据如何通过一组过滤器

 


WebServicesClientProtocol使用了WebRequest和WebResonse,所以你不必直接操作它们。然而,你仍然需要一种方式来操作发送和接收数据的协议属性。为此WebServicesClientProtocol暴露了两个属性:RequestSoapContext和ResponseSoapContext,两种SoapContext。这些对象反射了下一个请求消息和最后一个接收消息。

与Asp.Net Xml Web Service(接收端)进行集成

发送和接收的消息通过一个服务端SOAP协议工厂类WseProtocolFactory暴露给Asp.Net Xml Web Service。新的协议工厂类是为了使当网络服务方法别执行的时候有机会更改交换的Soap消息。

WseProtocolFactory将接受到的消息拷贝到数据流中,当这些数据被序列化成参数之前,接收过滤器可以对其进行处理。这些扩展也为目标方法创建数据流并序列化输出参数,当序列化步骤完成之后,参数通过WSE过滤器传递给目标方法。

为了让Web Service使用WseProtocolFactory,必须在Web.Config中进行配置。特别的应该添加<soapServerProtocolFactory>这个节点在部署web service的虚拟目录下

使用TCP来发送和接收Soap消息

WSE允许使用TCP协议来发送和接受SOAP消息。这样就可以脱离Web服务器,能够写出非常灵活和轻量级的网络服务。WSE支持one-way 消息模型和a request/response 成对模型。One-Way 模型通过SoapSender和SoapReceiver来实现,One-Way和request/response都能通过SoapClient/SoapServer来实现。

 作者:jillzhang
声明:第一次试着翻译文档,英语水平很菜,大家辩证着看

posted @ 2008-01-02 10:56  Robin Zhang  阅读(2400)  评论(2编辑  收藏  举报