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,本章不讨论 |