再谈ABC
最近一直在看蒋老师那13篇《我的WCF之旅》,终于看完了,看得很慢,记得最初出来工作的时候那时的技术总监建议我去看的,可几个月前我才开始看,看了几个月才把13篇看完。第一篇WCF的博文是我在做毕业设计的时候写的,可到了现在才出第二篇关于WCF的博文,毕业也一年了,工作换了。
弄WCF最基本的我还是记得蒋老师说过的组成一个终结点的三个要素可简称成ABC,分别是Address,Binding和Contract。这个在通过配置文件来配置WCF时通过endpoint节点能提现出来
<endpoint address="" binding ="ws2007HttpBinding" contract=" Logic.ILogic.IServiceLogic" />
在蒋老师的博文中有提到Endpoint包含的对象中,除了Address,Binding和Contract外,还有一个Behavior,这个Behavior出现在Service节点中,它对整个WCF服务也是有作用的。那下面则都说说这几个,以加深了解和理解。
Address:网络上任何一个资源都需要有一个位置才可以供其它人访问,Address就是以URI给这个Endpoint定位,让客户端需要WCF服务时有路可寻。就类似Socket通讯一样,需要建立Endpoint;URI是Address的其中一个很基本的成员,还有用于认证Endpoint与Endpoint通讯时,对方的Endpoint是否自身想要通讯的Endpoint的Identity。Headers是鄙人认为使得Endpoint定位最具有灵活性与扩展性的成员。从Headers可以看出它是一个集合,包含一个或多个Header,这些Header会加到SOAP Message(SOAP:简单对象访问协议)的头部中,header多数存放Address的信息,在过滤地址的时候会发挥作用。这里有两个应用场景,一个是WCF服务的路由(Routing)和客户端认证(Authentication),要进行这两个操作都可以把相关的内容加到header里面。
Binding:,WCF作为一个通讯框架,通讯是必不可少的,WCF中的C是Communication的简写,就是交流交互的意思,Binding就主要负责通讯这一块了,它负责了底层通讯的各个方面,WCF的通讯是基于消息传递模式的,那么关于这个消息传输时消息内容使用的编码(text/XML, binary,MTOM),消息的传输方式(TCP, Http, Named Pipe, MSMQ),不同的安全机制(SSL,Message Level Security),互操作性(Basic Profile 1.1,WS, WS-Federation,.NET,Peer,MSMQ),支持会话,支持事务,支持双工通讯,这些都可以选择不同的Binding在Binding上设置来实现。下面一个表格将介绍各个WCF默认提供的Binding以及他们各自的说明。
绑定 |
互操作性 |
安全 |
会话 |
事务 |
双工 |
传输协议 |
编码格式 |
说明 |
BasicHttpBinding |
Basic Profile 1.1 |
(None), Transport, Message |
None, (None) |
None |
n/a |
HTTP/HTTPS |
Text, MTOM |
一个绑定,适用于与符合WS-Basic Profile的Web服务 (例如基于ASP.NET Web服务(ASMX)的服务)进行 的通信。此绑定使用HTTP作为传输协议,并使用文本/XML 作为默认的消息编码。 |
WSHttpBinding |
WS |
Transport, (Message), Mixed |
(None), Transport, Reliable Session |
(None), Yes |
n/a |
HTTP/HTTPS |
Text, MTOM |
一个安全且可互操作的绑定,适合于非双工服务约定。 |
WSDualHttpBinding |
WS |
(Message) |
(Reliable Session) |
(None), Yes |
Yes |
HTTP |
Text, MTOM |
一个安全且可互操作的绑定,适用于双工服务协定或通过 SOAP媒介进行的通信。 |
WSFederationHttpBinding |
WS-Federation |
(Message) |
(None), Reliable Session |
(None), Yes |
No |
HTTP/HTTPS |
Text, MTOM |
一个安全且可互操作的绑定,支持WS联合协议并使联合中的 组织可以高效地对用户进行身份验证和授权。 |
NetTcpBinding |
.NET |
(Transport), Message |
Reliable Session, (Transport) |
(None), Yes |
Yes |
TCP |
Binary |
一个安全且进过优化的绑定,使用于WCF应用程序之间跨 计算机的通信。 |
NetNamedPipeBinding |
.NET |
(Transport) |
None, (Transport) |
(None), Yes |
Yes |
IPC |
Binary |
一个安全,可靠且进经过优化的绑定,适用于WCF应用程序 之间计算机上的通信。 |
NetMsmqBinding |
.NET |
Message, (Transport), Both |
(None) |
(None), Yes |
No |
MSMQ |
Binary |
一个排队绑定,适用于WCF应用程序之间跨计算机的通信。 |
NetPeerTcpBinding |
Peer |
(Transport) |
(None) |
(None) |
Yes |
P2P |
Binary |
一个支持多计算机安全通信的绑定。 |
MsmqIntegrationBinding |
MSMQ |
(Transport) |
(None) |
(None), Yes |
n/a |
MSMQ |
Binary |
一个绑定,适用于WCF应用程序和现有消息队列 (也称为MSMQ)应用程序之间跨计算机的通信。 |
ws2007HttpBinding |
WS |
Transport, (Message), Mixed |
(None), Transport, Reliable Session |
(None), Yes |
n/a |
HTTP/HTTPS |
Text, MTOM |
一个安全且可互操作的绑定,可为Security ReliableSession 的正确版本和TransactionFlow绑定元素提供支持。 |
ws2007FederationHttpBinding |
WS |
Transport, (Message), Mixed |
(None), Transport, Reliable Session |
(None), Yes |
n/a |
HTTP/HTTPS |
Text, MTOM |
一个安全且可互操作的绑定,它派生自WS2007HttpBinding 并支持联合安全性。 |
Contract:从Endpoint的配置上看contract,它是一个接口的完全限定名,而这个接口里面使用了OptionContract特性的方法都是客户端能通过WCF访问的,那就是说Contract就是暴露了这个WCF服务能执行的操作,告诉了客户端这个WCF服务能干些什么那是OptionContract。除此之外,服务端与客户端通讯的数据格式DataContract,在通讯过程中,这个消息的交互是采用的通讯模式(请求响应模式,单向模式,双工模式)是通过OptonContract特性的配置,在通讯过程中所用到的数据类型,我们需要额外的设置,那可以通过在DataContract和DataMember特性上设置,这些设置将影响到数据的序列化与反序列化,最终使得数据在传递之后生效。关于Contract这边配置基本上与Config文件没太大关系,反而与程序编码时用的比较多。
Behavior:Behavior虽然不是一个Endpoint的三要素之一,但它的配置也会影响到Endpoint间通讯的行为,比如回调客户端时的超时时间,用于向服务验证客户端身份的凭据,指定WCF回调对象的服务调试。
目前对WCF了解不完全透彻,以上有说错的恳请指出,谢谢!