Compartilhamento de porta Net.TCP
O WCF (Windows Communication Foundation) fornece um novo protocolo de rede baseado em TCP (net.tcp://) para comunicação de alto desempenho. O WCF também apresenta um novo componente do sistema, o Serviço de Compartilhamento de Porta Net.TCP que permite que as portas net.tcp sejam compartilhadas em vários processos de usuário.
Motivação e Segundo Plano
Quando o protocolo TCP/IP foi apresentado pela primeira vez, apenas um pequeno número de protocolos de aplicativo o usou. O TCP/IP usou números de porta para diferenciar entre aplicativos atribuindo um número de porta exclusivo de 16 bits a cada protocolo de aplicativo. Por exemplo, o tráfego HTTP hoje é padronizado para usar a porta TCP 80, o SMTP usa a porta TCP 25 e o FTP usa as portas TCP 20 e 21. Outros aplicativos que usam o TCP como transporte podem escolher outro número de porta disponível, por convenção ou por meio de padronização formal.
O uso de números de porta para distinguir entre aplicativos teve problemas de segurança. Os firewalls geralmente são configurados para bloquear o tráfego TCP em todas as portas, exceto em alguns pontos de entrada conhecidos, portanto, implantar um aplicativo que usa uma porta não padrão geralmente é complicado ou mesmo impossível devido à presença de firewalls corporativos e pessoais. Aplicativos que podem se comunicar por portas padrão e conhecidas que já são permitidas reduzem a superfície de ataque externa. Muitos aplicativos de rede usam o protocolo HTTP porque a maioria dos firewalls é configurada por padrão para permitir o tráfego na porta TCP 80.
O modelo HTTP.SYS no qual o tráfego para muitos aplicativos HTTP diferentes é multiplexado em uma única porta TCP tornou-se padrão na plataforma do Windows. Isso oferece um ponto de controle comum para administradores de firewall, permitindo que os desenvolvedores de aplicativos minimizem o custo de implantação da criação de novos aplicativos que podem usar a rede.
A capacidade de compartilhar portas em vários aplicativos HTTP tem sido um recurso dos IIS (Serviços de Informações da Internet). No entanto, foi apenas com a introdução de HTTP.SYS (o ouvinte de protocolo HTTP no modo kernel) com o IIS 6.0 que essa infraestrutura foi totalmente generalizada. Na verdade, HTTP.SYS permite que processos arbitrários de usuário compartilhem as portas TCP dedicadas ao tráfego HTTP. Essa funcionalidade permite que muitos aplicativos HTTP coexistam no mesmo computador físico em processos separados e isolados ao compartilhar a infraestrutura de rede necessária para enviar e receber tráfego pela porta TCP 80. O Serviço de Compartilhamento de Porta Net.TCP habilita o mesmo tipo de compartilhamento de porta para aplicativos net.tcp.
Arquitetura do compartilhamento de portas
A arquitetura de compartilhamento de portas no WCF tem três componentes principais:
Um processo de trabalho: qualquer processo que se comunique por net.tcp:// usando portas compartilhadas.
O transporte TCP do WCF: implementa o protocolo net.tcp://.
O Serviço de Compartilhamento de Porta Net.TCP: permite que muitos processos de trabalho compartilhem a mesma porta TCP.
O Serviço de Compartilhamento de Porta Net.TCP é um serviço do Windows no modo de usuário que aceita conexões net.tcp:// em nome dos processos de trabalho que se conectam por meio dele. Quando uma conexão de soquete é feita, o serviço de compartilhamento de portas inspeciona o fluxo de mensagens de entrada para obter endereço de destino dela. Com base nesse endereço, o serviço de compartilhamento de portas pode rotear o fluxo de dados para o aplicativo que vai processá-los no final.
Quando um serviço do WCF que usa o compartilhamento de porta net.tcp:// é aberto, a infraestrutura de transporte TCP do WCF não abre diretamente um soquete de TCP no processo do aplicativo. Em vez disso, a infraestrutura de transporte registra o URI (Uniform Resource Identifier) do endereço base do serviço com o Serviço de Compartilhamento de Porta Net.TCP e aguarda o serviço de compartilhamento de porta escutar mensagens no lugar dela. O serviço de compartilhamento de porta envia mensagens endereçadas ao serviço de aplicativo conforme elas chegam.
Instalação do compartilhamento de porta
O Serviço de Compartilhamento de Porta Net.TCP está disponível em todos os sistemas operacionais que dão suporte ao WinFX, mas o serviço não está habilitado por padrão. Como precaução de segurança, um administrador deve habilitar manualmente o Serviço de Compartilhamento de Porta Net.TCP antes do primeiro uso. O Serviço de Compartilhamento de Porta Net.TCP expõe opções de configuração que permitem manipular várias características dos soquetes de rede pertencentes ao serviço de compartilhamento de porta. Para obter mais informações, consulte Como habilitar o serviço de compartilhamento de porta Net.TCP.
Usar o Compartilhamento de Porta Net.tcp em um aplicativo
A maneira mais fácil de usar o compartilhamento de porta net.tcp:// em seu aplicativo do WCF é expondo um serviço usando NetTcpBinding e habilitar o Serviço de Compartilhamento de Porta Net.TCP usando a propriedade PortSharingEnabled.
Para obter mais informações sobre como fazer isso, consulte Como configurar um serviço do WCF para usar o compartilhamento de porta.
Implicações de segurança do compartilhamento de portas
Embora o Serviço de Compartilhamento de Porta Net.TCP forneça uma camada de processamento entre aplicativos e a rede, os aplicativos que usam o compartilhamento de porta ainda devem ser protegidos como se estivessem escutando diretamente na rede. Especificamente, os aplicativos que usam o compartilhamento de portas devem avaliar os privilégios de processo nos quais são executados. Considere executar seu aplicativo usando a conta interna do Serviço de Rede, que é executada com o conjunto mínimo de privilégios de processo necessários para comunicação de rede.