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



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

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

表格1:WCF标准绑定

名称传输编码InteropBasicHttpBindingHTTP/HTTPSTextNetTcpBindingTCPBinary-NetPeerTcpBindingP2PBinary-NetNamedPipeBindingIPCBinary-WSHttpBindingHTTP/HTTPSText,MTOM WSFederationBindingHTTP/HTTPSText,MTOM WSDualHttpBindingHTTPText,MTOM NetMsmqBindingMSMQBinary-MsmqIntegrationBindingMSMQBinary
为一个传输协议选择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.该端点是地址、合同和绑定的结合
每一个服务必须暴露至少一个业务端点,并且每一个端点都具有一个相同的合同 。在一个服务上的所有的端点都具有唯一的地址,而单个服务可以暴露多个端点 。这些端点能够使用相同的或不同的绑定并能暴露相同的或不同的合同 。你可以使用一个配置文件来以管理方式配置端点或以编程方式来实现端点配置 。

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

推荐阅读