Service Net.Tcp Listener Adapter manquant sous Windows Server 2022 : rétablir WCF .NET 4.8 pas à pas

Lorsque vous migrez ou installez une application Windows Communication Foundation (WCF) ciblant le .NET Framework 4.8 sur un nouveau serveur Windows Server 2022, il arrive que le service Net.Tcp Listener Adapter n’apparaisse pas dans la console services.msc. Sans cet adaptateur, tous les points de terminaison net.tcp:// échouent, ce qui bloque l’exécution de l’application. Ce guide exhaustif explique comment réactiver le service, identifier les rôles et fonctionnalités IIS/WAS nécessaires et vérifier pas à pas la bonne configuration du serveur.

Sommaire

Pourquoi le service disparaît‑il ?

Depuis Windows Server 2016, Microsoft a désolidarisé plusieurs composants IIS/WCF afin de réduire la surface d’attaque par défaut. Lors d’une installation « Server Core » ou d’une configuration minimale, les modules WAS chargés des protocoles non HTTP ne sont plus installés automatiquement ; ils doivent être ajoutés manuellement ou via un script d’automatisation. Tant que l’option “Activation non‑HTTP” n’est pas cochée, aucun adaptateur Net.Tcp n’est enregistré et le service n’existe tout simplement pas dans la base de registre.

Architecture : comment WCF s’appuie sur WAS et les adaptateurs

  • WAS (Windows Process Activation Service) orchestre le démarrage des services hébergés dans IIS, quel que soit le protocole.
  • Chaque Protocol Listener Adapter – HTTP, Net.Tcp, Net.Pipe, MSMQ – agit comme un pont entre WAS et le protocole concerné.
  • Le service Net.Tcp Port Sharing autorise plusieurs applications à écouter sur le même port TCP, fonctionnalité fréquemment utilisée par les services WCF dans un environnement mutualisé.

Composants obligatoires

Pour qu’un service WCF .NET 4.8 exposé en net.tcp fonctionne, quatre couches doivent être présentes :

NiveauFonctionnalité WindowsRôle/Fonction dans IIS
1. .NET« .NET Framework 4.8 Features »
2. WCF API« WCF Services » + Activation HTTP & non‑HTTP
3. WAS« Windows Process Activation Service »Process Model
4. IIS« Web Server »Développement d’applications → ASP.NET 4.8 + WCF TCP Port Sharing

Installation graphique (Server Manager)

  1. Ouvrez Server Manager » Manage » Add Roles and Features.
  2. Sélectionnez votre serveur cible, puis cochez :
    • Web Server (IIS)Application DevelopmentASP.NET 4.8
    • Dans le même arbre, développez WCF Services et cochez TCP Port Sharing.
    • .NET Framework 4.8 FeaturesWCF Services :
      • HTTP Activation
      • Non‑HTTP Activation (contient la prise en charge Net.Tcp, Net.Pipe, MSMQ, etc.)
    • Windows Process Activation ServiceProcess Model.
  3. Validez et laissez l’assistant installer les binaires demandés. Un redémarrage est conseillé pour finaliser l’écriture des clés de registre.

Installation automatisée avec PowerShell

Pour les environnements DevOps, incluez la commande suivante dans votre script de provisionnement :

Install-WindowsFeature `
  Web-WebServer, Web-Asp-Net45, Web-WHC, `
  NET-Framework-45-Features, NET-WCF-Services45, `
  NET-WCF-TCP-PortSharing45, NET-WCF-HTTP-Activation45, `
  WAS, WAS-Process-Model `
  -IncludeManagementTools -Restart

Astuce : ajoutez le paramètre -WhatIf lors du premier passage pour simuler l’installation et vérifier que les noms de fonctionnalités sont corrects dans votre build ISO.

Vérification post‑installation

  1. Relancez Win + Rservices.msc.
    • Recherchez les services :
      • Net.Tcp Listener Adapter
      • Net.Tcp Port Sharing Service
    • Pour chacun, définissez Startup type sur Automatic et cliquez sur Start.
  2. Exécutez iisreset pour recharger les nouveaux adaptateurs dans le Kernel Mode.
  3. Ouvrez un navigateur et testez un endpoint net.tcp:// à l’aide de Svcutil.exe ou de l’outil WCFTestClient.exe.

Résolution des erreurs courantes

« Endpoint not found » malgré la présence du service

Assurez‑vous que la balise <protocolMapping> dans web.config ou machine.config référence le protocole netTcpBinding. IIS doit connaître la correspondance entre le schéma d’URL et le binding WCF.

Échec d’ouverture du port TCP

  • Vérifiez que le pare‑feu Windows autorise le port (par défaut 808). Créez une règle entrante pour System ou %SystemRoot%\System32\svchost.exe -k iissvcs.
  • Sur un cluster NLB ou derrière un load‑balancer L4, assurez‑vous que la persistance des sessions TCP est activée.

Interdiction par une GPO

Une stratégie de groupe peut désactiver le Port Sharing. Vérifiez « Computer Configuration → Administrative Templates → Windows Components → Net.Tcp Port Sharing Service ».

Bonnes pratiques de sécurité

Même si Net.Tcp est interne, chiffrez les échanges avec Transport Security (SSL) ou Message Security lorsque des données sensibles transitent. Pour limiter la surface d’exposition :

  • Ne laissez actifs que les bindings nécessaires (http, net.tcp, etc.).
  • Changez le port défaut 808 si plusieurs applications Net.Tcp cohabitent.
  • Utilisez les comptes de service gérés (gMSA) au lieu de comptes locaux.

Optimisation des performances

Net.Tcp offre des performances élevées grâce à son pooling de connexions persistantes, mais plusieurs paramètres influent :

ParamètreFichier de confEffet
maxConnectionsmachine.configLimite les canaux simultanés.
listenBacklogRegistre : HKLM\SYSTEM\CurrentControlSet\Services\HTTP\ParametersTaille de la file d’attente TCP.
receiveTimeoutbindingDélai d’inactivité avant fermeture.

Sur un serveur très sollicité, ajustez maxConcurrentSessions et maxConcurrentCalls via le ServiceModel pour éviter une saturation de pools.

Powershell avancé : audit d’intégrité

Le script suivant liste l’état de chaque composant et génère un rapport HTML local dans C:\Temp\wcf‑audit.html :

$components = @(
  'Web-WebServer','Web-Asp-Net45','NET-Framework-45-Features',
  'NET-WCF-Services45','NET-WCF-TCP-PortSharing45','WAS'
)
$report = foreach($c in $components) {
  Get-WindowsFeature $c |
    Select-Object @{n='Composant';e={$_.DisplayName}},
                  @{n='Installé';e={($_.Installed) ? 'Oui':'Non'}}
}
$report | ConvertTo-Html -Title 'Audit WCF' |
  Out-File 'C:\Temp\wcf‑audit.html'
Invoke-Item 'C:\Temp\wcf‑audit.html'

FAQ express

Le service Net.Tcp repart en « Arrêté » après chaque redémarrage ?

Si votre application utilise le même port qu’un autre service, un conflit de socket provoque l’arrêt. Changez le port ou désactivez le service tiers.
L’installateur d’application dit « Windows Process Activation Service manquant » alors qu’il est installé ?

Vérifiez la sous‑fonctionnalité Process Model. Sans elle, l’API d’inscription des adaptateurs reste indisponible.

Conclusion

Le service Net.Tcp Listener Adapter est indispensable au fonctionnement des points de terminaison WCF en net.tcp://. Windows Server 2022, plus verrouillé par défaut, nécessite l’ajout explicite des modules IIS, WCF et WAS associés. En suivant les étapes détaillées de ce guide – installation des rôles, vérifications post‑déploiement, réglages de sécurité et de performance – vous rétablirez rapidement un environnement stable et sécurisé pour vos services .NET 4.8.


Sommaire