本文的出发点:
通过阅读本文,您能了解以下知识:
- WCF中的Binding是什么?
- Binding的组成?
- Binding Element 的分类?
- Binding描述了那些层面的信息?
- 选择正确的Binding
本文适合的读者:
本文适合WCF的初学者
WCF中的Binding是什么?
在弄清Binding是什么之前,我们先看一下WCF的中的Endpoint结构,一个Endpoint就类似于xml web service中的一个asmx文件,它包括三个组成部分1)Address 2) Binding 3) Contract,此三者被称为组成Endpoint的"ABC",下图阐述了Endpoint的组成结构:
ABC分别解决了Endpoint的如下问题:
A解决了Endpoint在哪的问题,也就是"Where is the endpoint?"
B 解决的是如何与Endpoint通讯的问题,也就是"How to communicate with endpoint?"
C解决了Endpoint提供什么功能的问题,也就是"What functionalities do the endpoint provide?"
上面的两篇文章WCF从理论到实践三:八号当铺之黑色契约和WCF从理论到实践四:路在何方分别阐述了Contract和Address,本文着重讨论Binding, Binding实现的是在客户端和服务端进行通讯的底层细节,包括数据如何传输(比如采用Tcp,Http等),如何解决安全问题(SSL,Message Level Security等),传输的消息的格式(如text/xml,MTOM,binary等)。
Binding的组成?
Binding包括三个组成部分:NameSpace,Name和BindingElement,如下图所示:
Name和NameSpace是服务元数据(meta date)的唯一标志,换句话说,二者就像Binding的姓名一样,而BindingElement则描述Binding的特征,我们说Binding能解决通讯方式的问题,关键是靠BindingElement来进行描述。
Binding Element 的分类
Binding Element中最核心的组成部分,它分为以下三种类型
- Encoding Binding Element:它用于描述传输数据的编码方式,比如用text/xml进行编码,用binary编码,用MTOM进行编码都是在这个上面定义,每个Binding Element必须包含一个Encoding Binding Element。
-
Transport Binding Element:它用于描述数据的传输方式,例如使用tcp进行传输,还是用http进行传输,还是用msmq,这些都是由Transport Binding Element来定
义,每一个Binding Element 必须包含一个Transport Binding Element
- Protocol Binding Element: 指定诸如安全性、可靠性、上下文流设置(context flow settins)
Binding描述了哪些层面的信息
一个Binding包含着丰富的信息,每种信息都描述了服务端和客户端交互过程中的一方面,如下表所示,Binding描述了这些层面的信息:
|
层次
|
备注说明
|
|
Transactions(事务)
|
TransactionFlowBindingElement,用于指定事务流程
|
|
Reliability(信赖)
|
ReliableSessionBindingElement,用于指定对会话方式
|
|
Security(安全)
|
SecurityBindingElement,指定安全方式
|
|
Encoding(编码)
|
Text, Binary, MTOM, Custom,指定数据传输格式
|
|
Transport(传输)
|
TCP, Named Pipes, HTTP, HTTPS, MSMQ, Custom,指定传输方式
|
选择正确的Binding
Binding是可以自定义实现的,可WCF框架已经为我们实现了足够多的Binding,供我们来选择,如下表所示:
|
Binding名称
|
Configuration Element
|
描述
|
|
BasicHttpBinding
|
basicHttpBinding
|
一个指定用符合基本网络服务规范通讯的binding,它用http进行传输,数据格式为text/xml
|
|
WSHttpBinding
|
wsHttpBinding
|
一个安全的通用的binding,但它不能在deplex中使用
|
|
WSDualHttpBinding
|
wsDualHttpBinding
|
一个安全的通用的binding,但能在deplex中使用
|
|
WSFederationHttpBinding
|
wsFederationHttpBinding
|
一个安全的通用的支持WSF的binding,能对用户进行验证和授权
|
|
NetTcpBinding
|
netTcpBinding
|
在wcf应用程序中最适合跨机器进行安全通讯的binding
|
|
NetNamedPipeBinding
|
netNamedPipeBinding
|
在wcf应用程序中最适合本机进行安全通讯的binding
|
|
NetMsmqBinding
|
netMsmqBinding
|
在wcf应用程序中最适合跨机器进行安全通讯的binding,并且支持排队
|
|
NetPeerTcpBinding
|
netPeerTcpBinding
|
一个支持安全的,多机交互的binding
|
|
MsmqIntegrationBinding
|
msmqIntegrationBinding
|
一个用于wcf与现有msmq程序进行安全通讯的binding
|
下面的表格分别删除了上表中的Binding在互操作性(Interoperability), 安全性(Security), 是否支持会话(Session), 是否支持事务(Transactions)和是否为全双工(Duplex)上不同。
|
Bingding
|
Interoperability
|
Security
|
Session
|
Transactions
|
Duplex
|
|
BasicHttpBinding
|
Basic Profile 1.1
|
(None), Transport, Message
|
None, (None)
|
None
|
n/a
|
|
WSHttpBinding
|
WS
|
Transport, (Message), Mixed
|
(None), Transport, Reliable Session
|
(None), Yes
|
n/a
|
|
WSDualHttpBinding
|
WS
|
(Message)
|
(Reliable Session)
|
(None), Yes
|
Yes
|
|
WSFederationHttpBinding
|
WS-Federation
|
(Message)
|
(None), Reliable Session
|
(None), Yes
|
No
|
|
NetTcpBinding
|
.NET
|
(Transport), Message
|
Reliable Session, (Transport)
|
(None), Yes
|
Yes
|
|
NetNamedPipeBinding
|
.NET
|
(Transport)
|
None, (Transport)
|
(None), Yes
|
Yes
|
|
NetMsmqBinding
|
.NET
|
Message, (Transport), Both
|
(None)
|
(None), Yes
|
No
|
|
NetPeerTcpBinding
|
Peer
|
(Transport)
|
(None)
|
(None)
|
Yes
|
|
MsmqIntegrationBinding
|
MSMQ
|
(Transport)
|
(None)
|
(None), Yes
|
n/a
|
例外,《Programming WCF Services》有一幅图也能说明各自的特征:
下面的图给出了我们选择Binding的方式
本文参考资料:
- http://www.cnblogs.com/wayfarer/archive/2006/04/10/370957.html
- http://www.cnblogs.com/artech/archive/2007/02/28/659331.html
- http://blog.csdn.net/TianBin_Su/archive/2006/10/08/1326566.aspx
- http://www.rainsts.net/article.asp?id=439
posted @ 2008-02-03 11:47
Robin Zhang 阅读(7813)
评论(18) 编辑 收藏 网摘 所属分类:
WCF