WCF - Ligação de serviço
A vinculação de serviço WCF é um conjunto de vários elementos em que cada elemento define a maneira como o serviço está se comunicando com o cliente. Um elemento de transporte e um elemento de codificação de mensagem são os dois componentes mais vitais de cada ligação. Neste capítulo, discutiremos várias associações de serviço WCF comumente usadas.
Ligação Básica
A vinculação básica é oferecida pela classe BasicHttpBinding. Ele usa o protocolo HTTP para transportar e representar um serviço WCF como um serviço da Web ASP.NET (serviço da Web ASMX), para que os clientes antigos que usam os serviços da Web ASMX possam consumir os novos serviços de maneira conveniente.
A vinculação básica é definida como vinculação padrão em um serviço da web WCF habilitado pelo Silverlight e é uma vinculação padrão para comunicações no estilo de serviço da web. Ele não oferece suporte a mensagens confiáveis.
A seguir, está um trecho de código que descreve as configurações padrão para vinculação básica.
<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>
As configurações padrão acima têm suas limitações óbvias, pois o tamanho da mensagem é limitado e não há modo de segurança. No entanto, a personalização da vinculação básica resolve esse problema como o mostrado abaixo.
<basicHttpBinding>
<binding name = "basicHttpSecure" maxBufferSize = "100000" maxReceivedMessageSize = "100000">
<readerQuotas maxArrayLength = "100000" maxStringContentLength = "100000"/>
<security mode = "TransportWithMessageCredential" />
</binding>
</basicHttpBinding>
Web Service Binding
A ligação de serviço da Web (WS) é fornecida pela classe WSHttpBinding. É bastante semelhante à ligação básica e usa os mesmos protocolos para transporte, mas oferece várias especificações WS– *, como WS – Reliable Messaging, WS – Transactions, WS – Security e muitos mais. Resumindo, WSHttpBinding é igual à soma das especificações basicHttpBinding e WS– *. Abaixo está um trecho de código que descreve as configurações padrão para 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>
Ligação IPC
A vinculação IPC usa o pipe nomeado e é oferecida pela classe netNamedPipeBinding. Esta é a encadernação mais rápida e mais segura entre todas as encadernações disponíveis. Embora a segurança no nível da mensagem não seja suportada aqui, as mensagens são seguras por padrão devido a uma segurança de transporte robusta. A seguir está o trecho de código que descreve as configurações padrão para vinculação 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>
Outros tipos de ligações de serviço
TCP Binding- Fornecido pela classe NetTCPBinding, essa ligação faz uso do protocolo TCP para comunicação dentro da mesma rede e faz a codificação da mensagem em formato binário. Essa ligação é considerada a mais confiável em comparação com outras.
WS Dual Binding- Este tipo de ligação é mais parecido com WSHttpBinding, com a única exceção de que facilita a comunicação bidirecional, ou seja, as mensagens podem ser enviadas e recebidas por clientes e serviços. É oferecido pela classe WSDualHttpBinding.
Web binding - A vinculação da Web é projetada para representar serviços WCF na forma de solicitações HTTP pelo uso de HTTP-GET, HTTP-POST, etc. É oferecido pela classe WebHttpBinding e é comumente usado com redes sociais.
MSMQ Binding- É oferecido pela classe NetMsmqBinding e é utilizado para fornecer soluções caso o serviço processe uma mensagem em um momento distinto do enviado pelo cliente. A vinculação do MSMQ usa o MSMQ para transporte e fornece suporte para mensagens desanexadas na fila. MSMQ é uma implementação para enfileiramento de mensagens oferecida pela Microsoft.
Federated WS Binding- É uma forma específica de vinculação de WS e oferece suporte para segurança federada. Ele é oferecido pela classe WSFederationHttpBinding.
Peer Network Binding- Oferecido pela classe NetPeerTCPBinding, é usado principalmente em sistemas de compartilhamento de arquivos. Ele usa o protocolo TCP, mas faz uso da rede de pares como transporte. Nessa rede, cada máquina (nó) atua como cliente e servidor para os outros nós. A vinculação de rede de mesmo nível é usada em sistemas de compartilhamento de arquivos como torrent.
MSMQ Integration Binding - Oferecido pela classe MsmqIntegrationBinding, ajuda a se comunicar com os sistemas existentes que se comunicam via MSMQ (Microsoft Message Queuing).
Além disso, também é possível criar ligações personalizadas. No entanto, como é possível ajustar as propriedades de configuração de cada ligação WCF, raramente surge a necessidade de criar ligações personalizadas.