WCF协议与绑定

35.2  WCF概念

本节描述WCF的如下方面:

●WCF通信协议

●地址、端点和绑定

●合同

●消息模式

●行为

●主机

35.2.1  WCF通信协议

如前所述,可以通过许多传输协议与WCF服务通信。在.NET 3.5 Framework中定义了4个协议:

●HTTP:它允许与任何地方的WCF服务通信,包括Internet。可以使用HTTP通信技术创建WCF Web服务。

●TCP:如果正确配置了防火墙,它允许与本地网络或Internet上的WCF服务通信。TCP比HTTP高效,功能也比较多,但配置起来比较复杂。

●指定的管道:它允许与WCF服务通信,该WCF服务必须与调用代码位于同一台机器的不同进程上。

●MSMQ:这是一种排队技术,允许应用程序发送的消息通过队列路由到目的地。MSMQ是一种可靠的消息传输技术,可以确保发送给队列的消息一定达到该队列。MSMQ还是一种异步技术,所以只有排在前面的消息都处理完了,服务仍有效时,才能处理当前的消息。

这些协议常常允许建立安全连接。例如,可以使用HTTPS协议建立Internet上的安全SSL连接。TCP使用Windows安全架构为本地网络上的安全性能提供了更多的可能性。

图35-1中列出了这些传输协议如何把应用程序与不同位置上的WCF服务连接起来。本章将介绍所有这些协议,但MSMQ除外,这个主题需要较深入的讨论。

 
(点击查看大图)图  35-1

为了连接WCF服务,必须知道它在什么地方。这表示必须知道端点的地址。

 

用于服务的地址类型取决于所使用的协议。本章前面介绍的3个协议都需要格式化的服务地址:

●HTTP:HTTP协议的地址是URL,其格式很常见:http://<server>:<port>/<service>。对于SSL连接,也可以使用https://<server>:<port>/<service>。如果在IIS中存储服务,<service>就是扩展名为.svc的文件(.svc文件类似于Web服务中使用的.asmx文件)。IIS地址可能包含比这个示例更多的子目录,即.svc文件之前有更多用/字符分隔的部分。

●TCP:TCP的地址采用net.tcp:// <server>:<port>/<service>形式。

●指定的管道:指定的管道连接的地址与上述类似,但没有端口号。其形式是net.pipe:// <server>/<service>。

服务的地址是一个基地址,它可用于为表示操作的端点创建地址。例如,在net.tcp:// <server>:<port>/<service>/operation1上有一个操作。

假定创建一个WCF服务,它有一个操作,绑定了前面介绍的3个协议,我们就可以使用下面的基地址:

 

 

http://www.mydomain.com/services/amazingservices/mygreatservice.svcnet.tcp://myhugeserver:8080/mygreatservicenet.pipe://localhost/mygreatservice 

http://www.mydomain.com/services/amazingservices/mygreatservice.svc/greatopnet.tcp://myhugeserver:8080/mygreatservice/greatopnet.pipe://localhost/mygreatservice/greatop 

如前所述,绑定不仅指定了操作使用的传输协议,还可以指定在传输协议上通信的安全要求、端点的事务处理功能、消息编码等。

绑定提供了非常大的灵活性,所以.NET Framework提供了一些可用的预定义绑定。还可以把这些绑定用作起点,修改它们,得到需要的绑定类型。预定义绑定有一些必须遵循的原则。每种绑定类型都用System.ServiceModel名称空间中的一个类表示。表35-1中列出了这些绑定及其基本信息。

表  35-1

  

  

BasicHttpBinding

最简单的HTTP绑定,Web服务使用的默认绑定,它的安全功能有限,不支持事务处理

WSHttpBinding

HTTP绑定的一种高级形式,可以使用WSE中引入的所有额外功能

WSDualHttpBinding

扩展了WSHttpBinding功能,包含双向通信功能。在双向通信中,服务器可以启动与客户机的通信,还可以进行一般的消息交换

WSFederationHttpBinding

扩展了WSHttpBinding功能,包含联合功能。联合功能允许第三方实现单向广播(single sign-on)和其他专用安全措施。这是一个高级主题,本章不讨论

NetTcpBinding

用于TCP通信,允许配置安全性、事务处理等

NetNamedPipeBinding

用于指定管道的通信,允许配置安全性、事务处理等

NetPeerTcpBinding

允许与多个客户机进行广播通信,是一个高级类,本章不讨论

NetMsmqBinding和

MsmqIntegrationBinding

这些绑定用于MSMQ,本章不讨论

 

posted @ 2013-10-31 11:55  雾静  阅读(2699)  评论(0编辑  收藏  举报