Selecionando um transporte
Este tópico discute critérios para escolher entre os três principais transportes incluídos no WCF (Windows Communication Foundation): 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 aborda o enfileiramento de mensagens.
O modelo de programação do 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 oferece flexibilidade para decidir como expor seus serviços à rede.
No WCF, você especifica como os dados serão transferidos em uma rede entre os pontos de extremidade usando uma associação, que é composta por uma sequência de elementos de associação. Um transporte é representado por um elemento de associação de transporte, que faz parte da associação. Uma associação inclui elementos opcionais de associação de protocolo, como segurança, um elemento de associação de codificador de mensagem necessário e um elemento de associaçã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 escolha sobre como usar um transporte específico. No entanto, os serviços do WCF podem ser acessíveis por meio de vários pontos de extremidade, cada um com um transporte diferente. Quando um único transporte não abrange o público-alvo pretendido para seu serviço, considere expor o serviço em vários pontos de extremidade. Em seguida, 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 Associações fornecidas pelo sistema) ou criar sua própria associação personalizada (consulte Associações personalizadas). Você também pode criar sua própria associação. Para obter mais informações, consulte Criar associações definidas pelo usuário.
Vantagens de cada transporte
Esta seção descreve os principais motivos para escolher qualquer um dos três transportes principais, 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 do navegador da Web que se comunicam com um servidor Web. O cliente envia uma solicitação para um servidor, que escuta 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. Em caso de êxito, 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: depois 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 associação de transporte HTTP é otimizada para interoperabilidade com sistemas não WCF herdados. Se todas as partes comunicantes estiverem usando o WCF, as associações baseadas em pipes nomeados ou baseadas em TCP 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 orientado a fluxo baseado em conexão com detecçã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 identificada por um endereço IP lógico.
O TCP fornece entrega de dados confiáveis 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 associação WCF mais rápida para cenários que envolvem a comunicação entre diferentes computadores. As trocas de mensagens usam BinaryMessageEncodingBindingElement para a transferência de mensagem otimizada. O TCP fornece comunicação duplex e, portanto, pode ser usado para implementar contratos duplex, mesmo que o cliente esteja por trás da NAT (conversão de endereços de rede).
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 um único computador.
Quando a comunicação é necessária entre diferentes aplicativos WCF em um único computador e você deseja impedir qualquer comunicação de outro computador, use o transporte de pipes nomeados. Uma restrição adicional é que os processos em execução na Á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
Quando se usa 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 escutar o site '2', portanto, o protocolo foi desabilitado para o site temporariamente. Consulte a mensagem de exceção para mais detalhes. URL: WeakWildcard:net.pipe:/<nome da máquina>/ Status: ConflictingRegistration Exception: Process Name: SMSvcHost Process ID: 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 apliquem ao seu aplicativo. Identifique os atributos importantes para seu aplicativo, identifique os transportes que se associam favoravelmente a cada um de seus atributos e selecione os transportes que funcionam melhor com seu conjunto de atributos.
Atributo | Descrição | Transportes favorecidos |
---|---|---|
Diagnósticos | O diagnóstico permite detectar automaticamente problemas de conectividade de transporte. Todos os transportes dão suporte à capacidade de enviar informações de falha de volta que descrevem a conectividade. No entanto, o WCF não inclui ferramentas de diagnóstico para investigar problemas de rede. | Nenhum |
Hosting | Todos os pontos de extremidade do WCF devem ser hospedados dentro de um aplicativo. O IIS 6.0 e versões anteriores dão 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 Processo do Windows. | HTTP |
Inspeção | A 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. Os transportes fáceis de inspecionar também podem exigir menos energia de processamento em dispositivos de rede. O nível de segurança usado afeta se as mensagens podem ser inspecionadas. | HTTP |
Latency | A 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 do transporte. Usar a comunicação duplex ou unidirecional com um transporte cujo padrão de troca de mensagens nativa é solicitação-resposta, como HTTP, pode causar latência adicional devido à correlação forçada de mensagens. Nessa situação, considere o uso de um transporte cujo padrão de troca de mensagens nativas é duplex, como TCP. | TCP, Nomeado Pipe |
Reach | O alcance de um transporte reflete a capacidade de conexão do transporte com outros sistemas. O transporte de pipe nomeado tem muito pouco alcance; ele só pode se conectar aos serviços em execução no mesmo computador. 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 Como trabalhar com NATs e firewalls. | HTTP, TCP |
Segurança | 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 fornece garantias sobre o remetente ou o receptor da mensagem. O WCF dá suporte à segurança de transferência no nível da mensagem e no nível de transporte. A segurança da mensagem será composta com um transporte se o transporte der suporte a um modo de transferência em buffer. O suporte para segurança de transporte varia dependendo do transporte escolhido. Os transportes HTTP, TCP e pipe nomeados têm paridade razoável em seu suporte para a segurança do transporte. |
Tudo |
Produtividade | A taxa de transferência mede a quantidade de dados que podem ser transmitidos e processados em um período especificado. Assim 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. Tanto o TCP quanto os transportes de pipe nomeados adicionam pouca sobrecarga ao corpo da mensagem e dão suporte a uma forma duplex nativa que reduz a espera por respostas de mensagem. | TCP, pipe nomeado |
Ferramentas | A ferramenta representa o suporte de aplicativos de terceiros para um protocolo para desenvolvimento, diagnóstico, hospedagem e outras atividades. Desenvolver ferramentas e software para trabalhar com o protocolo HTTP significa um investimento particularmente grande. | HTTP |