WCF服务绑定是一组包含多个元素的元素,其中每个元素定义服务与客户端通信的方式.传输元素和消息编码元素是每个绑定的两个最重要的组件.在本章中,我们将讨论常用的各种WCF服务绑定.
BasicHttpBinding类提供基本绑定.它使用HTTP协议将WCF服务作为ASP.NET Web服务(ASMX Web服务)进行传输和表示,以便使用ASMX Web服务的旧客户可以方便地使用新服务.
基本绑定在Silverlight启用的WCF Web服务中设置为默认绑定,是Web服务样式中通信的标准绑定.它不支持可靠的消息传递.
下面给出了一个代码片段,描述了基本绑定的默认设置.
<basicHttpBinding> <binding name = "basicHttpBindingDefaults" allowCookies = "false" bypassProxyOnLocal = "false" hostNameComparisonMode = "StrongWildcard" maxBufferPoolSize = "524288" maxBufferSize = "65536" maxReceivedMessageSize = "65536" messageEncoding = "Text" proxyAddress = "" textEncoding = "utf-8" transferMode = "Buffer" useDefaultWebProxy = "true" closeTimeout = "00:01:00" openTimeout = "00:01:00" receiveTimeout = "00:10:00" sendTimeout = "00:01:00"> <readerQuotas maxArrayLength = "16384" maxBytesPerRead = "4096" maxDepth = "32" maxNameTableCharCount = "16384" maxStringContentLength = "8192"/> <security mode = "None"> <transport clientCredentialType = "None" proxyCredentialType = "None" realm = ""/> <message algorithmSuite = "Basic256" clientCredentialType = "UserName" /> </security> </binding> </basicHttpBinding>
上述默认设置有明显的限制,因为邮件大小有限且没有安全模式.但是,基本绑定的自定义解决了这个问题,如下所示.
<basicHttpBinding> <binding name = "basicHttpSecure" maxBufferSize = "100000" maxReceivedMessageSize = "100000"> <readerQuotas maxArrayLength = "100000" maxStringContentLength = "100000"/> <security mode = "TransportWithMessageCredential" /> </binding> </basicHttpBinding>
Web服务(WS)绑定由WSHttpBinding类提供.它与基本绑定非常相似,并使用相同的协议进行传输,但提供了多种WS- *规范,例如WS-Reliable Messaging,WS-Transactions,WS-Security等等.简而言之,WSHttpBinding等于basicHttpBinding和WS- *规范的总和.下面给出了一个代码片段,描述了WS Binding&minus的默认设置;
<wsHttpBinding> <binding name = "wsHttpBindingDefaults" allowCookies = "false" bypassProxyOnLocal = "false" closeTimeout = "00:01:00" hostNameComparisonMode = "StrongWildcard" maxBufferPoolSize = "524288" maxReceivedMessageSize = "65536" messageEncoding = "Text" openTimeout = "00:01:00" receiveTimeout = "00:10:00" proxyAddress = "" sendTimeout = "00:01:00" textEncoding = "utf-8" transactionFlow = "false" useDefaultWebProxy = "true" > <readerQuotas maxArrayLength = "16384" maxBytesPerRead = ."4096" maxDepth = "32" maxNameTableCharCount = "16384" maxStringContentLength = "8192"/> <reliableSession enabled = "false" ordered = "true" inactivityTimeout = "oo:10:00" /> <security mode = "Message"> <message algorithmSuite = "Basic256" clientCredentialType = "Windows" esatalishSecurityContext = "true" negotiateServiceCredential = "true" /> <transport clientCredentialType = "Windows" proxyCredentialType = "None" realm = ""/> </security> </binding> </wsHttpBinding>
IPC绑定使用命名管道,由netNamedPipeBinding类提供.在所有可用的绑定中,这是最快的绑定和最安全的绑定.虽然此处不支持消息级安全性,但默认情况下消息是安全的,因为它具有强大的传输安全性.下面给出的代码片段描述了IPC绑定的默认设置 :
<netNamedPipeBinding> <binding name = "netPipeDefaults" closeTimeout = "00:01:00" hostNameComparisonMode = "StrongWildcard" maxBufferPoolSize = "524288" maxBufferSize = "65536" maxConnections = "10" maxReceivedMessageSize = "65536" openTimeout = "00:01:00" receiveTimeout = "00:10:00" sendTimeout = "00:01:00" transactionFlow = "false" transactionProtocol = "OleTransactions" transferMode = "Buffered"> <readerQuotas maxArrayLength = "16384" maxBytesPerRead = "4096" maxDepth = "32" maxNameTableCharCount = "16384" maxStringContentLength = "8192"/> <security mode = "Transport"> </security> </binding> </netNamedPipeBinding>
TCP绑定 : 由NetTCPBinding类提供,此绑定使用TCP协议在同一网络内进行通信,并以二进制格式进行消息编码.与其他人相比,这种绑定被认为是最可靠的.
WS双重绑定 : 这种类型的绑定更像是WSHttpBinding,唯一的例外是它有助于双向通信,即消息可以由客户端和服务发送和接收.它由WSDualHttpBinding类提供.
Web绑定 : Web绑定旨在通过使用HTTP-GET,HTTP-POST等以HTTP请求的形式表示WCF服务.它由WebHttpBinding类提供,并且通常与社交网络一起使用.
MSMQ Binding : 它由NetMsmqBinding类提供,用于在服务处理消息的时间与客户端发送的消息不同的情况下提供解决方案. MSMQ绑定使用MSMQ进行传输,并为排队的分离消息提供支持. MSMQ是Microsoft提供的消息队列实现.
联合WS绑定 : 它是WS绑定的特定形式,并提供对联合安全性的支持.它由WSFederationHttpBinding类提供.
对等网络绑定 : 它由NetPeerTCPBinding类提供,主要用于文件共享系统.它使用TCP协议,但使用对等网络作为传输.在此网络中,每台计算机(节点)充当其他节点的客户端和服务器.对等网络绑定用于像torrent这样的文件共享系统.
MSMQ Integration Binding : 由MsmqIntegrationBinding类提供,它有助于与通过MSMQ(Microsoft消息队列)进行通信的现有系统进行通信.
除此之外,它还有也可以创建自定义绑定.但是,由于可以调整每个WCF绑定的配置属性,因此很少需要创建自定义绑定.