Cuando migras una aplicación WCF 4.8 a Windows Server 2022 puedes llevarte la desagradable sorpresa de que el servicio Net.Tcp Listener Adapter no existe en services.msc. Sin este adaptador la activación de extremos net.tcp:// simplemente no ocurre y la aplicación se queda sin atender solicitudes TCP. A continuación encontrarás una guía exhaustiva para comprender el porqué, instalar lo que falta y verificar que todo vuelve a funcionar.
Causas habituales de la ausencia del servicio
- Características de WCF incompletas. La casilla genérica de “WCF Services” no activa los componentes de escucha para protocolos distintos de HTTP.
- WAS deshabilitado. Windows Process Activation Service es el orquestador de todos los adaptadores de escucha no HTTP.
- Configuraciones heredadas de seguridad que desinstalan NetTcpPortSharing o lo ponen en Disabled.
- Imagen base minimalista. Algunas plantillas de nube eliminan servicios “inútiles” para ahorrar memoria.
Visión rápida de los componentes implicados
Componente | Papel dentro de WCF |
---|---|
Net.Tcp Listener Adapter (SMSvcHost.exe) | Recibe peticiones TCP entrantes y las entrega a WAS. |
NetTcpPortSharing | Permite que varios procesos compartan un mismo puerto TCP. |
WAS (Windows Process Activation Service) | Arranca los servicios hospedados (IIS o self‑hosted) cuando llega una solicitud. |
IIS Role – Application Development → WCF Services | Instala handlers y modules para WCF en IIS. |
Característica exacta que crea Net.Tcp Listener Adapter
La confusión proviene de que el nombre visible en Server Manager es “Non‑HTTP Activation” dentro de las características de WCF 4.8. Esa casilla instala simultáneamente:
- SMSvcHost.exe y el servicio Net.Tcp Listener Adapter.
- Net.Pipe Listener Adapter y Net.Msmq Listener Adapter.
- Dependencias de WAS necesarias para la activación.
Resumido en una línea de PowerShell
Install-WindowsFeature NET-WCF-TCP-Activation45 -IncludeAllSubFeature
Guía paso a paso: método gráfico
- Abre Server Manager → Add roles and features.
- Tipo de instalación: Role-based or feature-based.
- Selecciona tu servidor y marca:
- Web Server (IIS) → Application Development → WCF Services → TCP Port Sharing.
- .NET Framework 4.8 Features → WCF Services → Non‑HTTP Activation.
- Windows Process Activation Service → Process Model y Configuration APIs.
- Confirma e instala. Si pide reinicio, acepta.
- Abre services.msc, localiza Net.Tcp Listener Adapter, establece Startup Type = Automatic y arráncalo.
Guía paso a paso: método por PowerShell
Install-WindowsFeature `
Web-Server, # IIS básico
Web-App-Dev, # Application Development
Web-WCF-Services, # WCF IIS bindings
AS-TCP-Port-Sharing, # TCP Port Sharing
NET-Framework-48-Features, # .NET 4.8 core
NET-WCF-Services45, # WCF Services 4.5+
NET-WCF-TCP-Activation45 # Non‑HTTP (TCP) activation
-IncludeAllSubFeature -IncludeManagementTools
El conmutador -IncludeAllSubFeature
evita que olvides dependencias. La instalación dura un minuto aproximado y no interrumpe sesiones RDP.
Comprobaciones posteriores a la instalación
- Servicios: verifica que Net.Tcp Listener Adapter y NetTcpPortSharing estén en ejecución.
- Puertos: ejecuta netstat -ano | find ":808" (o tu puerto configurado) para confirmar el estado LISTENING.
- Registros de eventos: bajo Applications and Services Logs → Microsoft → Windows → WCF-Activation no deben aparecer errores de tipo
ServiceActivationException
.
Firewall y seguridad
El adaptador escucha, por defecto, en el puerto 808. Si tu servidor solo expone el 80/443 externamente, añade una regla entrante:
New-NetFirewallRule -DisplayName "Net.Tcp 808" `
-Direction Inbound -Protocol TCP -LocalPort 808 -Action Allow
Si decides mover el servicio a otro puerto, recuerda actualizar los bindings en el archivo applicationHost.config o en tu .config de servicio WCF y repetir la regla de firewall.
Permisos y cuentas de servicio
NetTcpPortSharing se ejecuta bajo NT SERVICE\NetTcpPortSharing. Al instalar desde cero, esta cuenta ya posee los privilegios necesarios. Sin embargo, si previamente se endureció la plantilla mediante políticas GPO pueden faltar derechos SeServiceLogonRight. Para restaurarlos:
ntrights +r SeServiceLogonRight -u "NT SERVICE\NetTcpPortSharing"
Escenario de pruebas rápidas
- Crea un servicio WCF de prueba con el asistente de Visual Studio (WCF Service Application).
- Configura una única dirección
net.tcp://localhost:808/Calculator
. - Publica el sitio en IIS.
- Ejecuta la herramienta Test Client o un simple script PowerShell:
$proxy = New-Object System.ServiceModel.ChannelFactory[ [System.ServiceModel.Channels.IRequestChannel]]( (New-Object System.ServiceModel.NetTcpBinding()), "net.tcp://localhost:808/Calculator") $channel = $proxy.CreateChannel() $channel.Open()
- Si los mensajes fluyen, la cadena de activación funciona.
Resolución de problemas avanzada
El servicio aparece pero no arranca
Revisa Event ID 7023 – Service Control Manager. Los códigos 0x80131700
indican que no encuentra el CLR 4.8; reinstala NET-Framework-48-Core.
Conflicto de puertos
Aplicaciones de copias de seguridad o antivirus a veces ocupan el 808. Usa Get-NetTCPConnection -State Listen para identificar el PID y cámbialo en el registro:
Set-ItemProperty `
-Path 'HKLM:\SOFTWARE\Microsoft\SMSvcHost\Parameters' `
-Name TcpPort -Value 818
Acceso denegado al crear tuberías
Cuando la ACL de \\.\pipe\iisipm
o \\.\pipe\NetTcpPortSharing\*
se corrompe, elimina los permisos antiguos y concede de nuevo:
icacls \\.\pipe\NetTcpPortSharing\* /grant "NT SERVICE\NetTcpPortSharing:(R,W)"
Preguntas frecuentes
¿Puedo instalar solo el adaptador Net.Tcp sin IIS?
Sí. Basta con NET-WCF-TCP-Activation45
y WAS-Process-Model
. Sin embargo, perderás las facilidades de administración de IIS.
¿El adaptador soporta TLS 1.3?
El protocolo TCP genérico no cifra. La seguridad viene de Transport Security con SSL/TLS. A partir de KB5021131 Windows Server 2022 habilita TLS 1.3 si el canal lo negocia.
¿Cómo escalo puertos dinámicos en puertos altos?
Agrega rangos en el registro HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
, valores MaxUserPort
y TcpTimedWaitDelay
.
Checklist de validación final
- Características Non‑HTTP Activation y TCP Port Sharing instaladas.
- Servicios Net.Tcp Listener Adapter y NetTcpPortSharing iniciados.
- Puerto escuchando y accesible desde el exterior.
- Sin errores críticos en el visor de eventos de WCF.
- Prueba de cliente WCF conecta correctamente.
Conclusión. El 99 % de los problemas de “desaparición” del servicio Net.Tcp Listener Adapter se resuelven instalando la característica Non‑HTTP Activation junto con WAS y habilitando TCP Port Sharing. Sigue la guía anterior y tu hospedaje WCF volverá a funcionar sin reescribir código ni reinstalar todo el servidor.