WCF-服务绑定
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服务绑定
Web 服务 (WS) 绑定由 WSHttpBinding 类提供。它与基本绑定非常相似,并使用相同的传输协议,但提供了多种 WS-* 规范,例如 WS-Reliable Messaging、WS-Transactions、WS-Security 等等。简而言之,WSHttpBinding 等于 basicHttpBinding 和 WS–* 规范的总和。下面给出的代码片段描述了 WS Binding 的默认设置 -
<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绑定
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 Dual Binding - 这种类型的绑定更像 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 集成绑定- 由 MsmqIntegrationBinding 类提供,它有助于与通过 MSMQ(Microsoft 消息队列)通信的现有系统进行通信。
除此之外,还可以创建自定义绑定。但是,由于可以调整每个 WCF 绑定的配置属性,因此很少需要创建自定义绑定。