Привязка службы WCF представляет собой набор из нескольких элементов, каждый из которых определяет способ взаимодействия службы с клиентом. Транспортный элемент и элемент кодирования сообщения являются двумя наиболее важными компонентами каждой привязки. В этой главе мы обсудим различные часто используемые привязки службы WCF.
Базовая привязка
Базовое связывание предлагается классом BasicHttpBinding. Он использует протокол HTTP для передачи и представления службы WCF в качестве веб-службы ASP.NET (веб-службы ASMX), поэтому старые клиенты, использующие веб-службы ASMX, могут удобно использовать новые службы.
Базовая привязка устанавливается в качестве привязки по умолчанию в веб-службе WCF, включенной Silverlight, и является стандартной привязкой для связи в стиле веб-службы. Он не поддерживает надежные сообщения.
Ниже приведен фрагмент кода с настройками по умолчанию для базовой привязки.
<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>
Привязка веб-службы
Привязка веб-службы (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 Binding
Привязка 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.
-
Веб-привязка — Веб-привязка предназначена для представления служб WCF в форме HTTP-запросов с использованием HTTP-GET, HTTP-POST и т. Д. Она предлагается классом WebHttpBinding и широко используется в социальных сетях.
-
Привязка MSMQ — предлагается классом NetMsmqBinding и используется для предоставления решений в случае, если служба обрабатывает сообщение в другое время, отличное от отправленного клиентом. Привязка MSMQ использует MSMQ для транспортировки и обеспечивает поддержку отдельного сообщения, помещенного в очередь. MSMQ — это реализация очереди сообщений, предлагаемая Microsoft.
-
Федеративное связывание WS — это особая форма связывания WS, предлагающая поддержку федеративной безопасности. Он предлагается классом WSFederationHttpBinding.
-
Привязка к одноранговой сети — предлагается классом NetPeerTCPBinding, в основном используется в системах общего доступа к файлам. Он использует протокол TCP, но использует одноранговые сети в качестве транспорта. В этой сети каждый компьютер (узел) действует как клиент и сервер для других узлов. Привязка к одноранговой сети используется в системах обмена файлами, таких как торрент.
-
Привязка интеграции MSMQ — Предлагается классом MsmqIntegrationBinding, она помогает взаимодействовать с существующими системами, которые обмениваются данными через MSMQ (Microsoft Message Queuing).
Привязка TCP — Предоставляется классом NetTCPBinding, эта привязка использует протокол TCP для связи в той же сети и выполняет кодирование сообщений в двоичном формате. Это связывание считается наиболее надежным в отличие от других.
Двойная привязка WS — этот тип привязки больше похож на WSHttpBinding с единственным исключением, что он облегчает двунаправленную связь, то есть сообщения могут отправляться и приниматься как клиентами, так и службами. Он предлагается классом WSDualHttpBinding.
Веб-привязка — Веб-привязка предназначена для представления служб WCF в форме HTTP-запросов с использованием HTTP-GET, HTTP-POST и т. Д. Она предлагается классом WebHttpBinding и широко используется в социальных сетях.
Привязка MSMQ — предлагается классом NetMsmqBinding и используется для предоставления решений в случае, если служба обрабатывает сообщение в другое время, отличное от отправленного клиентом. Привязка MSMQ использует MSMQ для транспортировки и обеспечивает поддержку отдельного сообщения, помещенного в очередь. MSMQ — это реализация очереди сообщений, предлагаемая Microsoft.
Федеративное связывание WS — это особая форма связывания WS, предлагающая поддержку федеративной безопасности. Он предлагается классом WSFederationHttpBinding.
Привязка к одноранговой сети — предлагается классом NetPeerTCPBinding, в основном используется в системах общего доступа к файлам. Он использует протокол TCP, но использует одноранговые сети в качестве транспорта. В этой сети каждый компьютер (узел) действует как клиент и сервер для других узлов. Привязка к одноранговой сети используется в системах обмена файлами, таких как торрент.
Привязка интеграции MSMQ — Предлагается классом MsmqIntegrationBinding, она помогает взаимодействовать с существующими системами, которые обмениваются данными через MSMQ (Microsoft Message Queuing).
Помимо этого, также возможно создание пользовательских привязок. Однако, поскольку можно настроить свойства конфигурации каждой привязки WCF, необходимость создания пользовательских привязок возникает редко.