Freigeben über


Fehler beim Verwenden der Net.tcp-Aktivierung des Windows Communication Foundation-Diensts

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

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

Symptome

Betrachten Sie das folgende Szenario in Microsoft .NET Framework:

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

  • Wenn der Dienst länger als eine Minute dauert, um eine Anforderung von einer Clientanwendung zu verarbeiten, wird der folgende Fehler protokolliert:

    Protokollname: System
    Quelle: SMSvcHost 3.0.0.0.0
    Datum:
    Ereignis-ID: 8
    Aufgabenkategorie: Freigabedienst
    Ebene: Fehler
    Schlüsselwörter: Klassischer Benutzer: LOKALER DIENSTcomputer: Beschreibung: Fehler beim Verteilen eines duplizierten Sockets: Dieses Handle wird nun im Prozess geleert. ID: 2620 Source: System.ServiceModel.Activation.TcpWorkerProcess/33156464 Exception: System.TimeoutException: Dieser gesendete Anforderungsvorgang hat keine Antwort innerhalb des konfigurierten Timeouts (00:01:00) erhalten. Die für diesen Vorgang zugewiesene Zeit war möglicherweise ein Teil eines längeren Timeouts. Möglicherweise wird der Vorgang noch vom Dienst verarbeitet, oder es konnte keine Antwortnachricht vom Dienst gesendet werden. Bitte erwägen Sie, das Timeout des Vorgangs 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, da der SmSvcHost.exe Prozess des Net.TCP-Portfreigabediensts nach einer Minute ausfällt. Der interne Timeoutwert ist eine Minute. Wenn eine Anforderung an den Dienst gesendet wird, erstellt der SmSvcHost.exe Prozess eine Pipebindung, um neue Kanäle zu registrieren, um mit dem W3wp.exe Prozess von Internetinformationsdienste (IIS) zu kommunizieren. Der Vorgang erfordert eine Minute, um die Rohrbindung zu erstellen. Aus diesem Grund ist das Zeitüberschreitungen des Prozesses zu sehen. Das Timeout kann aus einer der folgenden Bedingungen resultieren:

  • Hohe CPU: Die CPU ist für einen längeren Zeitraum nahezu voll ausgelastt. Daher ist der Zieldienst nicht in der Lage, Anforderungen schnell genug zu verarbeiten.

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

  • Die Dienstinitialisierung dauert länger als 1 Minute.

Lösung

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

  • Diensteinschränkung: Der Dienst trifft eine Drosselung innerhalb des Dienstmodells.
    Lösung: Aktivieren Sie Warnungs-/Fehlerüberwachungen für den Zieldienst, um dieses Problem zu identifizieren. Wenn Ihre Lösung mehrere Sitzungen aktiv oder mehrere gleichzeitige Anrufe enthält, ändern Sie entweder die MaxConcurrentSessions or MaxConcurrentCalls Anzahl der Sitzungen, um die Auslastung zu verringern.

  • Die Dienstinitialisierung dauert länger als 1 Minute.
    Lösung: Überwachen Sie Die 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 verringern, oder verwenden Sie das AutoStart-Feature, um den Dienst vor dem ersten Clientaufruf zu initialisieren.

Weitere Informationen