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.
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
Componente | Sub‑componente essencial | Motivo |
---|---|---|
.NET Framework 4.8 Features | WCF 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 Features | WCF 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:
- Abra
services.msc
. - Confirme que Net.Tcp Listener Adapter existe.
- Altere o tipo de inicialização para Automatic e inicie o serviço.
- 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
- Execute
netstat -ano | findstr :808
; o PID deve corresponder aoSMSvcHost.exe
. - Acesse a página
<your‑site>/Service.svc?wsdl
para verificar se o service descriptor está exposto. - 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:
- Identifique o processo com
netstat -ano
. - Mude a porta no
baseAddress
ou finalize o processo concorrente. - 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.