WCF net.tcp-Dienst reagiert aufgrund einer Racebedingung nicht mehr

Dieser Artikel hilft Ihnen, Probleme zu beheben, wenn Sie einen Microsoft .NET Framework 4-basierten Windows Communication Foundation (WCF)-Dienst ausführen, der den net.tcp-Portfreigabedienst (Smsvchost.exe) verwendet. Eine Racebedingung bewirkt insbesondere, dass der WCF-Dienst hängen bleibt.

Ursprüngliche Produktversion:   .NET Framework 4.5
Ursprüngliche KB-Nummer:   3017663

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie haben einen WCF-Dienst installiert, der den net.tcp-Dienst verwendet.
  • Sie verwenden den Portfreigabedienst "net.tcp" (SmSvchost.exe).
  • Sie hosten diesen WCF-Dienst mithilfe von Internetinformationsdienste (IIS) 7.0 oder einer neueren Version von IIS.

In diesem Szenario reagiert der WCF-Dienst gelegentlich nicht mehr auf Anforderungen.

Ursache

Gelegentlich tritt eine Racebedingung auf, wenn der IIS-Anwendungspool für einen net.tcp WCF-Dienst wiederverwendet wird. Diese Wiederverwendung kann manuell, automatisch oder durch Ändern der Konfigurationsdatei der Anwendung während der Ausführung der Anwendung ausgelöst werden.

Wenn ein Anwendungspool wiederverwendet wird, können mit den Standardeinstellungen während des Herunterfahrens des alten Prozesses ein neuer Arbeitsprozess gestartet werden. In seltenen Situationen kann eine Racebedingung dazu führen, dass der Net.tcp-Portfreigabedienst die Verarbeitung von Anforderungen beendet. An diesem Punkt sollten Sie den net.tcp-Portfreigabedienst neu starten.

Lösung

Verwenden Sie den IIS-Manager, um den Anwendungspool des WCF-Diensts so zu konfigurieren, dass überlappende Recycles nicht zugelassen werden. Legen Sie dazu die folgenden erweiterten Einstellungen für diesen Anwendungspool auf "true" fest:

  • Deaktivieren Sie überlappende Wiederverwendung.
  • Deaktivieren Sie die Wiederverwendung für Konfigurationsänderungen.

Erfahren Sie mehr über die Anwendungspoolwiederverwendung und andere Optionen beim Verwalten, Optimieren und Konfigurieren von Anwendungspools in IIS 7.0.