Fehler, wenn Windows Communication Foundation-Dienst die Net.tcp-Aktivierung verwendet

Dieser Artikel hilft Ihnen, den Fehler zu beheben, der auftritt, wenn Windows Communication Foundation-Dienst die Net.tcp-Aktivierung verwendet.

Ursprüngliche Produktversion:   .NET Framework, Windows Communication Foundation
Ursprüngliche KB-Nummer:   2026177

Problembeschreibung

Betrachten Sie das folgende Szenario in Microsoft .NET Framework:

  • Sie führen einen Windows WCF-Dienst (Communication Foundation) mit net.tcp-Aktivierung aus.

  • Wenn der Dienst länger als eine Minute zum Verarbeiten einer Anforderung von einer Clientanwendung benötigt, wird der folgende Fehler protokolliert:

    Protokollname: System
    Quelle: SMSvcHost 3.0.0.0
    Datum:
    Ereignis-ID: 8
    Aufgabenkategorie: Freigabedienst
    Level: Error
    Schlüsselwörter: Klassischer Benutzer: LOCAL SERVICE Computer: Beschreibung: Beim Verteilen eines doppelten Sockets ist ein Fehler aufgetreten: Dieses Handle ist nun im Prozess durchgesickert. ID: 2620 Quelle: System.ServiceModel.Activation.TcpWorkerProcess/33156464 Exception: System.TimeoutException: This request operation sent to did not receive a reply within the configured timeout (00:01:00). Die diesem Vorgang zugewiesene Zeit kann ein Teil eines längeren Timeouts sein. Dies kann darauf zurückzuführen sein, dass der Dienst den Vorgang noch verarbeitet oder weil der Dienst keine Antwortnachricht senden konnte. Ziehen Sie in Betracht, das Vorgangstimeout zu erhöhen (indem Sie den Kanal/Proxy in IContextChannel umwandeln und die OperationTimeout-Eigenschaft festlegen), und stellen Sie sicher, dass der Dienst eine Verbindung mit dem Client herstellen kann.

Ursache

Dieses Problem tritt auf, weil der SmSvcHost.exe-Prozess des Net.TCP-Portfreigabediensts nach einer Minute einen Zeitüberschreitung verursacht hat. Der interne Timeoutwert beträgt eine Minute. Wenn eine Anforderung an den Dienst gesendet wird, erstellt der SmSvcHost.exe-Prozess eine Pipebindung, um neue Kanäle für die Kommunikation mit dem W3wp.exe-Prozess von Internetinformationsdienste (IIS) zu registrieren. Der Prozess benötigt eine Minute, um die Pipebindung zu erstellen. Daher wird das Zeitüberschreitungstimeout für den Prozess verursacht. Das Timeout kann aus einer der folgenden Bedingungen resultieren:

  • Hohe CPU: Die CPU ist für einen längeren Zeitraum nahezu vollständig ausgelastet. Daher kann der Zieldienst Anforderungen nicht schnell genug verarbeiten.

  • Diensteinschränkung: Der Dienst erreicht innerhalb des Dienstmodells eine Drosselung.

  • Die Dienstinitialisierung dauert länger als 1 Minute.

Lösung

  • Hohe CPU: Die CPU ist für einen längeren Zeitraum nahezu vollständig ausgelastet. Daher kann der Zieldienst Anforderungen nicht schnell genug verarbeiten.
    Auflösung: Sie müssen Ihren Code ändern oder Ressourcen hinzufügen, um die hohe CPU-Bedingung zu verhindern.

  • Diensteinschränkung: Der Dienst erreicht innerhalb des Dienstmodells eine Drosselung.
    Lösung: Aktivieren Sie Warnungs-/Fehlerablaufverfolgungen für den Zieldienst, um dieses Problem zu identifizieren. Wenn in Ihrer Lösung mehrere Sitzungen oder mehrere gleichzeitige Anrufe aktiv sind, ändern Sie entweder MaxConcurrentSessions or MaxConcurrentCalls die, um die Last zu reduzieren.

  • Die Dienstinitialisierung dauert länger als 1 Minute.
    Auflösung: Überwachen Sie Ihre Ablaufverfolgungen, um festzustellen, ob die Initialisierung der Dienstanwendung länger als eine Minute dauert. Überprüfen Sie, ob es möglich ist, die Initialisierungslogik zu ändern, um diese Zeit zu verkürzen, oder verwenden Sie die Funktion für den automatischen Start, um den Dienst vor dem ersten Clientaufruf zu initialisieren.

Weitere Informationen