WCF – 服务绑定
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 服务 (WS) 绑定由 WSHttpBinding 类提供。它与基本绑定非常相似,并使用相同的传输协议,但提供了几个 WS-* 规范,例如 WS-Reliable Messaging、WS-Transactions、WS-Security 等等。简而言之,WSHttpBinding 等于 basicHttpBinding 和 WS-* 规范的总和。下面给出的代码片段描述了 WS 绑定的默认设置 –
<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 Dual Binding – 这种类型的绑定更像 WSHttpBinding,唯一的例外是它促进双向通信,即客户端和服务都可以发送和接收消息。它由 WSDualHttpBinding 类提供。
-
Web 绑定– Web 绑定旨在通过使用 HTTP-GET、HTTP-POST 等以 HTTP 请求的形式表示 WCF 服务。它由 WebHttpBinding 类提供,通常与社交网络一起使用。
-
MSMQ Binding – 它由 NetMsmqBinding 类提供,用于提供解决方案,以防服务在与客户端发送的时间不同的时间处理消息。MSMQ 绑定使用 MSMQ 进行传输,并为分离的消息排队提供支持。MSMQ 是 Microsoft 提供的消息队列实现。
-
联合 WS 绑定– 它是一种特定形式的 WS 绑定,并提供对联合安全的支持。它由 WSFederationHttpBinding 类提供。
-
Peer Network Binding – 由 NetPeerTCPBinding 类提供,主要用于文件共享系统。它使用 TCP 协议,但使用对等网络作为传输。在这种网络中,每台机器(节点)充当其他节点的客户端和服务器。对等网络绑定用于文件共享系统,如 torrent。
-
MSMQ 集成绑定– 由 MsmqIntegrationBinding 类提供,它有助于与通过 MSMQ(Microsoft 消息队列)进行通信的现有系统进行通信。
除此之外,还可以创建自定义绑定。但是,由于可以调整每个 WCF 绑定的配置属性,因此很少需要创建自定义绑定。