Como habilitar o Net.Tcp Listener Adapter no Windows Server 2022 para aplicações WCF

Aplicações WCF que usam o protocolo net.tcp só conseguem iniciar se o serviço Net.Tcp Listener Adapter estiver corretamente registrado e em execução. No Windows Server 2022 esse serviço não aparece por padrão, pois depende de papéis e recursos opcionais. Este guia detalha, passo a passo, como instalar tudo que é necessário — pelo Server Manager ou via PowerShell —, como validar a instalação, endurecer a superfície de ataque e resolver erros frequentes. O objetivo é que você chegue ao final com seu aplicativo .NET Framework 4.8 rodando sem dores de cabeça e com alta disponibilidade.

Índice

Visão geral do problema

Ao implantar um aplicativo WCF (Windows Communication Foundation) configurado para binding="netTcpBinding", você pode se deparar com erros como:

Exception: System.InvalidOperationException: Cannot open ServiceHost
InnerException: System.ServiceModel.AddressAccessDeniedException:
HTTP could not register URL net.tcp://*:808/.

A mensagem acima indica que o host do serviço WCF não conseguiu registrar a porta TCP porque o Net.Tcp Listener Adapter (NTLA) — responsável por escutar e encaminhar requisições net.tcp ao WAS (Windows Process Activation Service) — está ausente ou parado.

Por que o serviço não aparece no Windows Server 2022?

  • No Windows Server, papéis (roles) e recursos (features) são componentes sob demanda. O instalador mantém o sistema enxuto por padrão.
  • A pilha WCF clássica de Binding não HTTP foi separada em sub‑features para reduzir a superfície de ataque. Somente quando você adiciona “WCF Services → Non‑HTTP Activation” é que o instalador cria o executável SMSvcHost.exe e registra o NTLA.
  • Por consequência, se você instalar apenas o IIS ou apenas o ASP.NET 4.8 sem marcar essas sub‑features, o serviço não é criado.

Requisitos de pré‑instalação

ComponenteSub‑componente essencialMotivo
.NET Framework 4.8 FeaturesWCF Services
└ Non‑HTTP Activation
Cria NTLA e habilita canais net.tcp.
Web Server (IIS)Application Development
└ ASP.NET 4.8
Permite hospedar serviços WCF no IIS/WAS.
.NET Framework 4.8 FeaturesWCF Services
└ HTTP Activation
Necessário para metadados via HTTP e para dependências internas do WCF.
Web‑Mgmt‑Console (opcional)Simplifica a administração via UI gráfica.

Instalação via Server Manager

Passo 1 – Iniciar o assistente

Abra o Server Manager > menu Manage > Add Roles and Features. Siga até a etapa Select installation type e escolha Role‑based or feature‑based installation.

Passo 2 – Selecionar o servidor

No screen seguinte, escolha o host local ou o servidor remoto do seu cluster.

Passo 3 – Adicionar o role Web Server (IIS)

Marque Web Server (IIS). O assistente perguntará se você quer instalar as dependências do IIS; confirme.

Passo 4 – Habilitar módulos de desenvolvimento

  • Expanda Web Server (IIS) → Web Server → Application Development.
  • Selecione ASP.NET 4.8.
  • Em Application Development, marque também WCF Services e, sob ele, TCP Port Sharing.

Passo 5 – Adicionar features do .NET

  • Na tela Select features, expanda .NET Framework 4.8 Features > WCF Services.
  • Marque HTTP Activation e Non‑HTTP Activation (este último habilita net.tcp).

Passo 6 – (Opcional) Ferramentas de gestão

Ao final, o assistente oferece instalar o IIS Management Console. Apesar de opcional, isso facilita o dia a dia, especialmente se você prefere UI gráfica.

Passo 7 – Concluir e reiniciar

Clique em Install. Se o assistente solicitar reinicialização, aceite. Após o reboot:

  1. Abra services.msc.
  2. Confirme que Net.Tcp Listener Adapter existe.
  3. Altere o tipo de inicialização para Automatic e inicie o serviço.
  4. Garanta que o Net.Tcp Port Sharing também esteja em execução.

Instalação via PowerShell

Para automação em larga escala (Azure VMs, scripts DSC, pipelines CI/CD), opte pelo cmdlet Install-WindowsFeature. O snippet abaixo cobre tudo que vimos:

Install-WindowsFeature `
  Net-WCF-Services45,        # Serviços WCF
  Net-WCF-TCP-PortSharing45, # Compartilhamento de porta TCP
  Web-ASP-Net45,             # ASP.NET 4.8
  Web-Mgmt-Console           # Console IIS
  -IncludeAllSubFeature `
  -IncludeManagementTools

A saída bem‑sucedida exibe Success: True. Caso precise do comando equivalente usado em versões anteriores do Windows, veja:

Install-WindowsFeature `
  AS-NET-Framework-Features,AS-NET-Framework,`
  AS-WCF-Services,AS-TCP-Port-Sharing `
  -IncludeAllSubFeature -IncludeManagementTools

Automatizando reinicialização

Para reiniciar automaticamente caso o recurso exija:

$pending = Install-WindowsFeature ... -Restart
if ($pending.RestartNeeded -eq 'Yes') { Restart-Computer }

Pós‑instalação: configurando serviços

Mesmo ativado, o NTLA depende de permissões e ACLs corretas:

  • Conta de serviço: por padrão, o serviço roda como NT AUTHORITY\LocalService. Se sua política exigir conta dedicada, configure-a e garanta o direito Log on as a service.
  • Firewall: abra as portas necessárias (geralmente 808 ou 809, mas depende do seu baseAddress). Exemplo:
New-NetFirewallRule -DisplayName "WCF Net.TCP 808" `
  -Direction Inbound -Protocol TCP -LocalPort 808 -Action Allow

Validando a configuração

Testes rápidos

  1. Execute netstat -ano | findstr :808; o PID deve corresponder ao SMSvcHost.exe.
  2. Acesse a página <your‑site>/Service.svc?wsdl para verificar se o service descriptor está exposto.
  3. Use o SvcConfigEditor.exe (vem com o SDK do Windows) para gerar um diagnostics report.

Script de verificação automática

$service = Get-Service -Name NetTcpActivator -ErrorAction SilentlyContinue
if ($service -and $service.Status -eq 'Running') {
    Write-Host "NTLA está rodando."
} else {
    Write-Warning "NTLA ausente ou parado."
}

Hardening e segurança

Proteger um endpoint net.tcp vai além de abrir porta:

  • Configure security mode="Transport" e exija certificado TLS interno.
  • Implemente clientCredentialType="Windows" para autenticação via Kerberos ou NTLM.
  • Desabilite protocolos antigos como TLS 1.0 e 1.1 (HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols).
  • Use grupos de firewall limitados a sub‑redes específicas.
  • Monitore o Event ID 2000 (W3SVC) e Event ID 2281 (WAS) para falhas de binding.

Solução de problemas comuns

NTLA não inicia com erro 1053

Verifique se o serviço dependente Net.Tcp Port Sharing está configurado para iniciar automaticamente. Se não, execute:

Set-Service NetTcpPortSharing -StartupType Automatic
Start-Service NetTcpPortSharing

Erro 1023 – Acesso negado à porta

Esse erro ocorre quando outro processo já usa a porta ou quando a conta do serviço não tem permissão. Solução:

  1. Identifique o processo com netstat -ano.
  2. Mude a porta no baseAddress ou finalize o processo concorrente.
  3. Reinicie o NTLA.

Falha no registro de SPN

Quando você vê Event ID 10036, significa que o SPN não pôde ser gravado no AD. Configure um SPN manualmente:

setspn -S WCF/MyService hostname.domínio

FAQ

Posso usar .NET 6 ou .NET 8 em vez do .NET Framework 4.8?

Sim, mas não com WCF clássico — esse stack foi aposentado. Você precisaria migrar para gRPC ou para CoreWCF. Caso contrário, mantenha o serviço no .NET Framework.

É obrigatório instalar o IIS?

Não. Se você hospeda o serviço em ServiceHost próprio (self‑host), basta instalar as features WCF Services → Non‑HTTP Activation e TCP Port Sharing. Entretanto, o IIS fornece reciclagem automática, balanceamento e logging unificado.

Depois de tudo instalado, o serviço continua parado. O que fazer?

Verifique eventos no System Event Log; erros de inicialização normalmente apontam para conflitos de porta ou permissões.

Conclusão

Habilitar o Net.Tcp Listener Adapter no Windows Server 2022 é um processo direto quando se conhecem as dependências exatas da pilha WCF. A instalação das features corretas — seja pelo Server Manager, seja por script PowerShell — cria o serviço, ativa o protocolo net.tcp e elimina erros de binding na inicialização. Depois de validar portas, firewall, dependências e segurança, seu aplicativo WCF estará pronto para produção com o mínimo de atrito operacional.

Índice