Escolher um Transporte
Este tópico discute os critérios para escolher entre os três transportes principais incluídos no Windows Communication Foundation (WCF): HTTP, TCP e pipes nomeados. O WCF também inclui um transporte de enfileiramento de mensagens (também conhecido como MSMQ), mas este documento não abrange o enfileiramento de mensagens.
O modelo de programação WCF separa as operações de ponto de extremidade (conforme expresso em um contrato de serviço) do mecanismo de transporte que conecta dois pontos de extremidade. Isso lhe dá a flexibilidade de decidir como expor seus serviços à rede.
No WCF, você especifica como transferir dados através de uma rede entre pontos de extremidade usando uma ligação, que é composta de uma sequência de elementos de ligação. Um transporte é representado por um elemento de ligação de transporte, que faz parte da ligação. Uma associação inclui elementos de vinculação de protocolo opcionais, como segurança, um elemento de vinculação de codificador de mensagem necessário e um elemento de vinculação de transporte necessário. Um transporte envia ou recebe a forma serializada de uma mensagem de ou para outro aplicativo.
Se você precisar se conectar a um cliente ou servidor existente, talvez não tenha a opção de usar um transporte específico. No entanto, os serviços WCF podem ser disponibilizados através de vários pontos de extremidade, cada um com um transporte diferente. Quando um único transporte não cobrir o público-alvo do seu serviço, considere expor o serviço em vários pontos de extremidade. Os aplicativos cliente podem usar o ponto de extremidade que é melhor para eles.
Depois de escolher um transporte, você deve selecionar uma associação que o use. Você pode escolher uma associação fornecida pelo sistema (consulte Ligações fornecidas pelo sistema) ou pode criar sua própria vinculação personalizada (consulte Ligações personalizadas). Você também pode criar sua própria ligação. Para obter mais informações, consulte Criando ligações definidas pelo usuário.
Vantagens de cada transporte
Esta seção descreve as principais razões para escolher qualquer um dos três principais transportes, incluindo um gráfico de decisão detalhado para escolher entre eles.
Quando usar o transporte HTTP
HTTP é um protocolo de solicitação/resposta entre clientes e servidores. O aplicativo mais comum consiste em clientes de navegador da Web que se comunicam com um servidor Web. O cliente envia uma solicitação para um servidor, que escuta as mensagens de solicitação do cliente. Quando o servidor recebe uma solicitação, ele retorna uma resposta, que contém o status da solicitação. Se forem bem-sucedidos, dados opcionais, como uma página da Web, uma mensagem de erro ou outras informações, serão retornados. Para obter mais informações sobre o protocolo HTTP, consulte HTTP - Hypertext Transfer Protocol.
O protocolo HTTP não é baseado em conexão — uma vez que a resposta é enviada, nenhum estado é mantido. Para lidar com transações de várias páginas, o aplicativo deve persistir qualquer estado necessário.
No WCF, a ligação de transporte HTTP é otimizada para interoperabilidade com sistemas não-WCF herdados. Se todas as partes comunicantes estiverem usando WCF, as ligações baseadas em TCP ou pipes nomeados serão mais rápidas. Para obter mais informações, consulte NetTcpBinding e NetNamedPipeBinding.
Quando usar o transporte TCP
O TCP é um serviço de entrega baseado em conexão e orientado a fluxo com deteção e correção de erros de ponta a ponta. Baseado em conexão significa que uma sessão de comunicação entre hosts é estabelecida antes da troca de dados. Um host é qualquer dispositivo em uma rede TCP/IP identificado por um endereço IP lógico.
O TCP fornece entrega de dados confiável e facilidade de uso. Especificamente, o TCP notifica o remetente da entrega de pacotes, garante que os pacotes sejam entregues na mesma ordem em que são enviados, retransmite pacotes perdidos e garante que os pacotes de dados não sejam duplicados. Observe que essa entrega confiável se aplica entre dois nós TCP/IP e não é a mesma coisa que WS-ReliableMessaging, que se aplica entre pontos de extremidade, não importa quantos nós intermediários eles possam incluir.
O transporte TCP do WCF é otimizado para o cenário em que ambas as extremidades da comunicação estão usando o WCF. Essa associação é a ligação WCF mais rápida para cenários que envolvem comunicação entre máquinas diferentes. As trocas de mensagens usam o BinaryMessageEncodingBindingElement para transferência de mensagens otimizada. O TCP fornece comunicação duplex e, portanto, pode ser usado para implementar contratos duplex, mesmo que o cliente esteja atrás da conversão de endereços de rede (NAT).
Quando usar o transporte de pipe nomeado
Um pipe nomeado é um objeto no kernel do sistema operacional Windows, como uma seção de memória compartilhada que os processos podem usar para comunicação. Um pipe nomeado tem um nome e pode ser usado para comunicação unidirecional ou duplex entre processos em uma única máquina.
Quando a comunicação for necessária entre diferentes aplicativos WCF em um único computador e você quiser impedir qualquer comunicação de outra máquina, use o transporte de pipes nomeados. Uma restrição adicional é que os processos executados a partir da Área de Trabalho Remota do Windows podem ser restritos à mesma sessão da Área de Trabalho Remota do Windows, a menos que tenham privilégios elevados.
Aviso
Ao usar o transporte de pipe nomeado com uma reserva de URL curinga fraca em vários sites hospedados no IIS, o seguinte erro pode ocorrer: Ocorreu um erro no serviço de ativação 'NetPipeActivator' do protocolo 'net.pipe' ao tentar ouvir o site '2', portanto, o protocolo é desativado para o site temporariamente. Consulte a mensagem de exceção para obter mais detalhes. URL: WeakWildcard:net.pipe:/<machine name>/ Status: ConflictingRegistration Exception: Nome do processo: SMSvcHost ID do processo: 1076\
Pontos de decisão para escolher um transporte
A tabela a seguir descreve os pontos de decisão comuns usados para escolher um transporte. Você deve considerar quaisquer atributos e transportes adicionais que se aplicam ao seu aplicativo. Identifique os atributos que são importantes para seu aplicativo, identifique os transportes que se associam favoravelmente a cada um dos seus atributos e selecione os transportes que funcionam melhor com seu conjunto de atributos.
Atributo | Description | Transportes favorecidos |
---|---|---|
Diagnóstico | Os diagnósticos permitem detetar automaticamente problemas de conectividade de transporte. Todos os transportes suportam a capacidade de enviar de volta informações de falha que descrevem a conectividade. No entanto, o WCF não inclui ferramentas de diagnóstico para investigar problemas de rede. | Nenhuma |
Alojamento | Todos os pontos de extremidade WCF devem ser hospedados dentro de um aplicativo. O IIS 6.0 e versões anteriores oferecem suporte apenas à hospedagem de aplicativos que usam o transporte HTTP. No Windows Vista, o suporte é adicionado para hospedar todos os transportes WCF, incluindo TCP e pipes nomeados. Para obter mais informações, consulte Hospedagem nos Serviços de Informações da Internet e Hospedagem no Serviço de Ativação de Processos do Windows. | HTTP |
Inspeção | Inspeção é a capacidade de extrair e processar informações de mensagens durante a transmissão. O protocolo HTTP separa as informações de roteamento e controle dos dados, facilitando a criação de ferramentas que inspecionam e analisam mensagens. Transportes fáceis de inspecionar também podem exigir menos poder de processamento em dispositivos de rede. O nível de segurança usado afeta se as mensagens podem ser inspecionadas. | HTTP |
Latência | Latência é o tempo mínimo necessário para concluir uma troca de mensagens. Todas as operações de rede têm mais ou menos latência, dependendo da escolha de transporte. Usar comunicação duplex ou unidirecional com um transporte cujo padrão nativo de troca de mensagens é solicitação-resposta, como HTTP, pode causar latência adicional devido à correlação forçada de mensagens. Nessa situação, considere usar um transporte cujo padrão nativo de troca de mensagens seja duplex, como TCP. | TCP, nomeado Tubo |
Reach | O alcance de um transporte reflete a capacidade do transporte em se conectar com outros sistemas. O chamado transporte de tubos tem muito pouco alcance; ele só pode se conectar a serviços executados na mesma máquina. Os transportes TCP e HTTP têm excelente alcance e podem penetrar em algumas configurações de NAT e firewall. Para obter mais informações, consulte Trabalhando com NATs e firewalls. | HTTP, TCP |
Segurança | Segurança é a capacidade de proteger mensagens durante a transferência, fornecendo confidencialidade, integridade ou autenticação. A confidencialidade protege uma mensagem de ser examinada, a integridade protege uma mensagem de ser modificada e a autenticação dá garantias sobre o remetente ou recetor da mensagem. O WCF oferece suporte à segurança de transferência tanto no nível da mensagem quanto no nível do transporte. A segurança da mensagem é composta com um transporte se o transporte suportar um modo de transferência em buffer. O apoio à segurança dos transportes varia consoante o transporte escolhido. Os transportes HTTP, TCP e pipe nomeado têm paridade razoável em seu suporte para segurança de transporte. |
Todos |
Débito | A taxa de transferência mede a quantidade de dados que podem ser transmitidos e processados em um período de tempo especificado. Como a latência, o transporte escolhido pode afetar a taxa de transferência para operações de serviço. Maximizar a taxa de transferência de um transporte requer minimizar a sobrecarga de transmissão de conteúdo, bem como minimizar o tempo gasto aguardando a conclusão das trocas de mensagens. Os transportes TCP e pipe nomeado adicionam pouca sobrecarga ao corpo da mensagem e suportam uma forma duplex nativa que reduz a espera por respostas de mensagens. | TCP, pipe nomeado |
Ferramentas | As ferramentas representam o suporte a aplicativos de terceiros para um protocolo para desenvolvimento, diagnóstico, hospedagem e outras atividades. O desenvolvimento de ferramentas e software para trabalhar com o protocolo HTTP significa um investimento particularmente grande. | HTTP |