DIE IIS-Anwendungspool-ShutdownTimeLimit-Recycleeigenschaft gilt nicht für WAS-gehostete WCF-Dienste mit net.tcp
Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem Microsoft-Internetinformationsdienste ShutdownTimeLimit (IIS)-Anwendungspoolwiederverwendungseigenschaft nicht für WAS-hosted Communication Foundation (WCF)-Dienste mithilfe von net.tcp gilt.
Ursprüngliche Produktversion: Internetinformationsdienste
Ursprüngliche KB-Nummer: 2819362
Problembeschreibung
Nach der Implementierung eines Windows WCF-Diensts, der vom Windows Aktivierungsdienst (WAS) gehostet wird, ist für den iis-Anwendungspool, der der Anwendung zugewiesen ist, die Zeit für das Herunterfahren des Papierkorbs ShutdownTimeLimit auf 90 Sekunden festgelegt. Dadurch kann der WCF-Dienst alle aktiven Arbeitsaufgaben abschließen, wenn der Anwendungspool wiederverwendet wird. Wenn die Anwendungswiederverwendung erfolgt, wird der vorhandene Arbeitsprozess jedoch vor 90 Sekunden heruntergefahren, sodass die aktive Arbeit nicht abgeschlossen werden kann.
Ursache
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Net.tcp verhält sich anders als Hypertext Transfer Protocol (HTTP), wenn ein IIS-Anwendungspool wiederverwendet wird, und beendet die Verbindung, bevor der ShutdownTimeLimit Timer erreicht wird, und beendet den Arbeitsprozess, der die Anforderung verarbeitet hat. HTTP-Anwendungen berücksichtigen den ShutdownTimeLimit Timer, net.tcp-Anwendungen jedoch nicht.
Das zugrunde liegende Problem besteht darin, dass beim Wiederverwenden des IIS-Anwendungspools die Sitzungsinformationen für den Kanal "net.tcp" verloren gehen. Wenn der Anwendungspool neu gestartet wird, kann ein HTTP-Kanal erneut geöffnet werden, da IIS die Kanalinformationen verarbeitet. Für die net.tcp-Verbindung ist es jedoch SMSvcHost.exe, die diesen Kanal tatsächlich steuert. IIS bindet die SMSvcHost.exe nicht erneut ein, um den Kanal erneut zu öffnen. Zu diesem Zeitpunkt wurde die Clientverbindung geschlossen, und der Client muss die Kommunikation neu starten.
Die Net.tcp WAS-Implementierung verwendet SMSvcHost.exe, um eingehende TCP-Anforderungen zu überwachen. Beim Empfang richtet SMSvcHost.exe eine interne Named-Pipe-Verbindung ein, um den entsprechenden WCF-Dienst aufzurufen. Dies ist im Grunde ein unsichtbarer Duplexkanal. Wenn der IIS-Anwendungspool wiederverwendet wird, gehen Sitzungsstatusinformationen verloren, und die Named-Pipe-Duplexverbindung wird unterbrochen. Ein hartcodiertes Ein-Minuten-Timeout innerhalb SMSvcHost.exe unterbricht schließlich die Socketverbindung.
Diese Vorgehensweise zieht zweierlei Konsequenzen nach sich:
- Der Clientkanal ruft eine Socketausnahme ab und muss erneut geöffnet werden, damit er erneut verwendet werden kann.
- Der WCF-Vorgang, der ausgeführt wurde, wird vor dem normalen
ShutdownTimeLimitIIS-Timerwert abgebrochen. Die unterbrochene Duplexverbindung bewirkt, dass WCF den Vorgang abbricht.
Problemumgehung
Um dieses Problem zu umgehen, sollten Sie eine Möglichkeit in Betracht ziehen, die erforderlichen Bereinigungen an einer Stelle in die Warteschlange zu stellen, die nicht vom Sitzungsstatus abhängig ist, anstatt sich auf das ShutdownTimeLimit IIS-Intervall zu verlassen, um die erforderlichen Bereinigungen in einem festen Zeitraum auszuführen.
Weitere Informationen
Es wird auch empfohlen, einen Hotfix von Microsoft Verbinden Has Been Retiredzu installieren. Dieses Problem wird jedoch nicht behoben. Es wird ein verwandtes Problem vermieden, bei dem SMSvcHost.exe nicht mehr auf alle Anforderungen reagiert.