电脑技术学习

WinVista新技术 WCF开发指南之构建服务

dn001

  八. WAS宿主

  Windows活动服务(WAS)是可用于Windows Vista中的一种系统服务。WAS是IIS7的一部分,但是可以被独立地配置。为了使用WAS来宿主通讯WCF服务,你需要提供一个.svc文件。该WAS提供与IIS和自宿主相比更多的优点,包括空闲时间管理、标识管理、应用程序池、隔离等等,并且是选择的宿主进程(在可用的情况下)。而且,这种自宿主的进程为进程内宿主提供独特的优点:处理未知的客户环境、依赖于TCP或IPC(当只有IIS可用时)、利用HTTP上的多个端口(当只有IIS 6可用时)以及通过编程方式存取一些高级宿主特征。

  九. 绑定

  与任何给定的服务进行通讯都存在多方面的问题。首先,存在许多可能的通讯模式:消息可能是同步请求/响应或异步式的"激活-忘记"模式(fire-and-forget);消息也可能是双向的;消息能够被立即传输或队列化操作而该队列可能是持久性的或易破坏性的。

  还存在许多可能的消息传输协议:例如HTTP(或HTTPS),TCP,P2P(端对端网络),IPC(命名管道)或MSMQ。也存在一些可能的消息编码选项:你可以选择普通文本以支持互操作性,二进制编码以便于优化性能,或MTOM(消息传输优化机制)以便处理巨大载荷。

  也存在一些消息保护选项:你可以选择不对之进行保护,你也可以使用它们来仅提供传输级安全或提供消息级隐私和安全,并且当然,也存在很多种方式用于对客户端实现认证和授权。消息传输在跨越中间媒体和中断连接时可能是不可靠的或可靠的端到端式,并且消息可能是以其发送的方式传输的或是以其接收方式传输的。

  通讯服务可能需要与其它服务或仅能够使用基本Web服务协议的客户端互操作,或者它们能够使用WS-*现代协议的核心(例如WS-安全和WS-原子事务)。通讯服务可能需要与旧式的客户端通过原始的MSMQ消息进行互操作,或你可能想限制通讯服务以便仅与另一个WCF服务或客户端互操作。

  简言之,通讯存在许多方面的内容,包括大量的参数和决策点。其中,一些选择可能是互斥的,而另一些选择可能要求必须使用另外的相应选择。很明显,客户端和服务必须在所有这些选项上相吻合,以达到正确交流的目的。为了简化并使其更具可管理性,WCF小组共同在绑定中提供了一个这样的通讯方面集合。

  个绑定仅仅是对于相协调的传输协议、消息编码、通讯模式、可靠性、安全性、事务传播和互操作性的预封装。理想情况下,你能够从通讯服务代码中"提取"所有的这些繁重的任务方面并且允许它专注于实现业务逻辑。这样做可以使你在相当不同的繁重任务方面使用相同的服务逻辑,而绑定正好使你能够实现这一目的。

  你可以使用WCF提供的绑定,也就是说,你或者可以"浓缩"它们的属性,或者是从头编写通讯自己的定制绑定。一个服务在它的元数据中出版它的绑定选择,这使得客户端能够查询这种类型和绑定的特定属性,因为客户端必须使用与服务完全一样的绑定。单个服务能够支持在独立的地址上的多个绑定。

  通常,服务并不指定关于绑定本身。WCF定义了列举于表格1中的共9种标准绑定。基于文本的编码使一个WCF服务(或客户端)能够通过HTTP与任何其它服务(或客户端)进行交流而不考虑它的技术;然而,通过TCP或IPC的二进制编码传输能够产生最优的性能,但是却以失去极广泛的互操作性为代价(因为它必须使用WCF到WCF的通讯)。

  表格1:WCF标准绑定

名称 传输 编码 Interop
BasicHttpBinding HTTP/HTTPS Text +
NetTcpBinding TCP Binary -
NetPeerTcpBinding P2P Binary -
NetNamedPipeBinding IPC Binary -
WSHttpBinding HTTP/HTTPS Text,MTOM +
WSFederationBinding HTTP/HTTPS Text,MTOM +
WSDualHttpBinding HTTP Text,MTOM +
NetMsmqBinding MSMQ Binary -
MsmqIntegrationBinding MSMQ Binary +

  为一个传输协议选择MSMQ能够强制实现WCF到WCF或WCF到MSQM的通讯,但是,这仅是针对非连接的离线工作情况提供的。典型情况下,为通讯服务选择一个绑定应该遵循如图4所示的策略活动图。


图4.策略活动图:该图展示了选择一个绑定的过程。

  你应该问自己的第一个问题是,是否通讯服务需要与非WCF客户进行交互。如果回答"是",并且如果客户端是一个旧的MSMQ客户端,那么应该选择NetMsmqBinding-它可以使通讯服务与这样的一个客户端通过MSMQ进行互操作。如果你需要与一非WCF客户端进行互操作并且该客户端期望使用基本的Web服务协议(ASMX Web服务),那么,你可以选择BasicHttpBinding-它能够把通讯WCF服务暴露到外界,就好象它是一个ASMX Web服务一样。

  缺点是你不能利用任何现代WS-*协议。然而,如果非WCF客户端能理解这些标准,那么,你可以选择WS绑定之一,例如WSHttpBinding,WSFederationBinding或WSDualHttpBinding。如果你可以假定客户端是一个WCF客户端,但它要求离线或非连接性交互,那么你可以选择使用MSMQ的NetMsmqBinding来传输消息。如果客户端需要连接的通讯但能够跨越计算机边界被调用,那么你可以选择通过TCP进行通讯的NetTcpBinding。

  如果客户端位于与服务同一台计算机上,那么你可以选择使用命名管道的NetNamedPipeBinding来(IPC)最优化性能。注意,一个使用NetNamedPipeBinding的服务不能接受除它自己以外的来自任何其它计算机的调用,并且这样也会更为安全。你可以基于其它标准(例如,回调需要(WSDualHttpBinding),端对端网络(NetPeerTcpBinding)或联盟安全(WSFederationBinding))来详细地调整绑定选择。

  十. 端点

  每一个服务都关联于一个定义了该服务所在位置的地址,一个定义了如何与服务进行通讯的绑定和一个定义了该服务所实现功能的合同。

  事实上,WCF用端点的形式来形式化描述这种关系。该端点是地址、合同和绑定的一个结合(见图5)。每一个服务必须具有三个端点,而且由服务暴露该端点。从逻辑上讲,端点是服务的接口,并且类似于一个CLR或COM接口。


图5.该端点是地址、合同和绑定的结合

  每一个服务必须暴露至少一个业务端点,并且每一个端点都具有一个相同的合同。在一个服务上的所有的端点都具有唯一的地址,而单个服务可以暴露多个端点。这些端点能够使用相同的或不同的绑定并能暴露相同的或不同的合同。你可以使用一个配置文件来以管理方式配置端点或以编程方式来实现端点配置。

标签: