Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
Framework C#技术 VB.NET VC.NET WCFWPF
当前位置: 主页 > WinForm教程 > WPF >

WCF4.0新特性体验(4):路由服务Routing Service(上)

时间:2010-08-12 23:09来源:未知 作者:admin 点击:

消息路由功能的支持也是WCF4.0的一个新特性。今天我们同样会对消息路由做一个完整,详细的介绍。文章首先会对消息路由的历史知识做个总结,然后介绍WS-Routing(WS-路由)和WS-Addressing(WS-寻址)规范,之后我们会介绍WCF4.0如何实现消息路由。最后给出WCF4.0 消息路由的例子。供大家参考。

  这里提到的“路由服务”其实并不是一个新的技术概念。因为在WCF框架出来以前,已经由很多框架支持消息路由,也就是消息转发机制,WSE 1.0 与 WSE 2.0都提供了消息路由的功能。

  另外在很多系统里,我们都能看到路由系统的例子,一些程序,在后台从事转发消息的工作。比如我们电子邮件里的 邮件服务器。当然也有我们自己开发的一些类似邮件服务程序的应用系统。

     路由,这个词在很多计算机网络教程里可以看到,我们使用了一个网络互连设备就是路由器。这个物理网络中,从事转发数据报工作的设备。

     同样在虚拟的消息传输网络中,逻辑上,也有一部分程序,在各个网络节点之间转发消息。这个也称为“消息中介者”,它们也会把消息转发到消息应该到达的目标。这些也就是最简单的路由服务程序。

    在面向服务的应用系统中,最重要的概念就是消息,消息的传输是一个非常重要的问题。而在大多数情况下,消息要经历多个网络节点,这里会涉及到消息路由问题。WS规范很早就制定了对于消息路由问题的解决办法,这里最早的就是WS-Routing 。当然后来逐渐为更完善的规范WS-Addressing取代。当然这里,许多消息框架也对于消息路由提供了支持。

【1】历史回顾:

     这里首先提到的就是WSE,WSE是微软对于Web Service的一个扩展版本,在这里已经提供了对于消息路由的支持。

  WSE 1.0 与 WSE 2.0 之间的区别之一是对 WS-Addressing 的支持。WS-Addressing 替换了 WSE 1.0 中支持的 WS-Routing 规范的大部分功能。从功能方面来说,WS-Addressing 不是将重点放在路由路径上,而是提供一种机制将 To 和 From 标头添加到 SOAP 信封中。WS-Addressing 也支持 Action、ReplyTo 和 FaultTo 标头。Action 标头类似于通过 HTTP 发送 SOAP 消息时通常使用的 SOAPAction HTTP 标头。

    支持对于消息路由,WCF4.0之前的框架没有提供支持,在WCF4.0里又重新加入对于消息路由机制的支持。当然这里我们学习消息路由,首先还是来了解一下与消息路由相关的一些规范,下面我们就来依次看一下WS-Routing和WS-Addressing。

【2】WS-Routing(WS-路由):

  早期的SOAP消息因为存在路径依赖问题,因此不能实现在多个协议之间转发,而WS-Routing 是解决路径依赖问题的第一个规范。WS-Routing 使您能够以传输中立的方式指定消息路由和调度信息。

    Web服务路由规范(WS-Routing)定义了路由SOAP消息的机制。SOAP是一个轻量级的有线传输协议,定义了一系列传输交换机制,用来传输在应用层协议上使用的方法调用。SOAP实际上没有定义从一点发送消息到另一点的机制,即使在它的规范中它引用了一个虚拟的消息路径机制。WS-Routing(以前被称作SOAP路由协议)是一个无状态协议,他扩展了SOAP协议,WS-Routing通过定义一个方法来说明一个预先设计好的路由或传输路径,这个路径将从消息源,经过若干中介,最后到达消息的最终接受者。

  WS-Routing 定义了要在 SOAP 标头块中使用的新元素(名为 <r:path>)。这个路径元素有几个子元素,它们可以用来指定路由和调度信息,包括 <r:to> 和 <r:action>。这些元素可以用来相关的路由信息,但不依赖传输协议。当然为了支持更复杂的路由情况,WS-Routing也定义了一些其它可选元素。例子如下:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/06/soap-envelope">
   <SOAP-ENV:Header>
      <wsrp:path xmlns:wsrp="http://schemas.xmlsoap.org/rp/">
    <wsrp:action>http://www.xml.org/chat</wsrp:action>
         <wsrp:to>soap://frank.com/some/endpoint</wsrp:to>
         <wsrp:fwd>
            <wsrp:via>soap://xulei.com</wsrp:via>
            <wsrp:via>soap://msdn.com</wsrp:via>
         </wsrp:fwd>
         <wsrp:from>soap://laoxu.com/some/endpoint</wsrp:from>
         <wsrp:id>uuid:00000000-3322-11111-1111-111111111111</wsrp:id>
      </wsrp:path>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      ...
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

  这里path节点下面的几个重要子节点的作用如下:

"from"元素表示消息来源。或者是发送者地址。
"to"元素表示消息最终接受者的地址。
"fwd"元素记录发送时经过的路径信息。
"rev"元素回发消息的反向路径信息,这个可以在发送消息的过程中生成。
  WS-Routing通过定义"rev"元素从而允许双向的消息交换。"fwd"和"rev"元素都包含"via"元素,"via"元素用于描述每一个消息途径的节点,也就是中间的消息参与者。而"fwd"和"rev"元素包含的其他元素则被用于定义消息的标识、相关性和目的。

  尽管这种消息内路由功能非常强大,,但它也存在一些安全问题。路由器必须修改标头。如果我们需要对消息头进行签名,则原始的发送方无法在签名消息(包括 WS-Routing 标头)之后并在不破坏原始签名的情况下使用 WS-Routing 路径发送消息。如果不对消息头加密,则存在很大的安全隐患。

  为了解决这些安全性就出现了一种更简单的基于 SOAP 路由的方法:WS-Addressing。

【3】WS-Addressing(WS-寻址):

  为了改进WS-Routing ,WS-Addressing 为 Web 服务寻址提供了传输中立的机制。WS-Addressing 使上述 WS-Routing 的简化形式化,并且添加了少量其他功能。

  1)基本概念:

  WS-Addressing 放弃了与消息路径相关的 WS-Routing 元素(包括 <r:path>、<r:fwd> 和 <r:rev>),并且假定用户将依靠“下一个跃点”方式来解决路由需要。 <wsa:To> 指定消息的目标,<wsa:Action> 指定操作, <wsa:MessageID> 指定消息ID。如果是应答消息,则使用 <wsa:RelatesTo> 标头和它的 RelationshipType 属性来表示该应答消息与请求消息之间的关系。

  2)终结点引用:

  此外,WS-Addressing 还引用终结点引入了新终结点引用机制。这使得可以在消息中传递终结点引用(叫做“按引用传递”),这样就可以告诉接收方应答消息的发送地址。

  我们看一个完整的WS-Addressing 的例子:

<s:Envelope>
  <s:Header>
    <wsa:Action>http://frank_xl.cnblogs.com/SubmitClaim</wsa:Action>
    <wsa:To>http://frank_xl.cnblogs.com/Claims/Submit.asmx</wsa:To>
    <wsa:From>
      <wsa:Address>http://frank_xl.cnblogs.com/main/sub.asmx</wsa:Address>
      <wsa:ReferenceProperties>
        <c:PatientProfile>123456</c:PatientProfile>
        <c:CarrierID>987654</c:CarrierID>
      </wsa:ReferenceProperties>
    </wsa:From>
    <wsa:ReplyTo>
      <wsa:Address>http://frank_xl.cnblogs.com/resp/resp.asmx</wsa:Address>
      <wsa:ReferenceProperties>
        <c:PatientProfile>123456</c:PatientProfile>
        <c:CarrierID>987654</c:CarrierID>
      </wsa:ReferenceProperties>
    </wsa:ReplyTo>
    <wsa:FaultTo>
      <wsa:Address>http://frank_xl.cnblogs.com/fault/err.asmx</wsa:Address>
      <wsa:ReferenceProperties>
        <c:PatientProfile>11111111</c:PatientProfile>
        <c:CarrierID>2222222</c:CarrierID>
      </wsa:ReferenceProperties>
    </wsa:FaultTo>
  </s:Header>
  <s:Body xmlns:c="http://xml.org/claims">
    <c:SubmitClaim> ... </c:SubmitClaim>
  </s:Body>
</s:Envelope>
 我们可以看到SOAP消息头关于<wsa:From>、<wsa:ReplyTo> 和 <wsa:FaultTo>的定义。

  3)WCF相关类型:

  另外因为SOAP和WS-Addressing 规范都存在不同的版本, SOAP的两个版本分别是SOAP 1.1和SOAP 1.2。而WS-Addressing 当前有两种版本:WS-Addressing August 2004 和 WS-Addressing 1.0。WCF为了提供完善的支持,在MessageVersion类里都给出了定义。这些版本可以分别通过使用 WSAddressingAugust2004 和 WSAddressing10 属性进行检索。两者的对应关系,在WCF的类库里可以通过MessageVersion控制。MessageVersion的类型定义如下:

public sealed class MessageVersion
{
  public static MessageVersion Default { get; }
  public static MessageVersion None { get; }
  public static MessageVersion Soap11 { get; }
  public static MessageVersion Soap11WSAddressing10 { get; }
  public static MessageVersion Soap11WSAddressingAugust2004 { get; }
  public static MessageVersion Soap12 { get; }
  public static MessageVersion Soap12WSAddressing10 { get; }
  public static MessageVersion Soap12WSAddressingAugust2004 { get; }
}
   这个就是我们看到的WCF内部对于SOAP消息寻址规范支持的类型,WCF框架会使用这个类型来控制消息使用的SOAP消息以及WS-Addressing 的版本。

(责任编辑:admin)
Tags:WCF4.0
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价