2010-12-18 8 views
6

Es gibt einen WCF-Dienst mit einem seit langem laufenden asynchronen Thread. Dieser lang andauernde Vorgang kann mehr als 1 Tag dauern. Wir Hosting WCF-Dienst auf IIS 6.Long-running Asynchronous Thread in WCF

Das Thema läuft OK, aber in 20 Minuten sind wir Fehlermeldung erhalten:
"Thread abgebrochen wurde"

Das Thema ist als ein toter Ergebnis.

Unsere WCF-Service-Konfiguration:
[ServiceBehavior (InstanceContextMode = InstanceContextMode.Single)]
[ServiceBehavior (ConcurrencyMode = ConcurrencyMode.Single)]

Können Sie die Ursache dieses Problems vorschlagen?

Vielen Dank für Ihre Antworten.

Antwort

9

Wenn es keine Aktivität (keine Anfragen) zu diesem Web-Service gibt, kann IIS sich entschließen, die Anwendungsdomäne zu entladen, was natürlich dazu führt, dass alle Threads gelöscht werden. Der Standardwert ist 20 Minuten und kann in den Eigenschaften des Anwendungspools in IIS konfiguriert werden. Es gibt auch andere Faktoren, die dazu führen können, dass der App-Pool wiederverwendet wird, z. B. wenn das System auf wenig Arbeitsspeicher ausgeführt wird. So etwas in IIS zu hosten ist möglicherweise nicht zuverlässig. Möglicherweise möchten Sie lange laufende Aufgaben in Windows Services hosten.

+0

@Artur, überprüfen Sie die Einstellungen des Anwendungspools, obwohl ich Ihnen sehr empfehlen würde, Windows-Dienste für solche Aufgaben zu verwenden. –

+2

Danke. Ich denke, wir sollten es in Windows Service hosten. –

7

IIS6 verfügt über eine Einstellung, die den App-Pool nach einer vordefinierten Zeit ohne Anforderungen herunterfährt. Der Standardwert ist 20 Minuten. Es scheint so zu sein, dass du in diese Richtung rennst. Sie finden diese Einstellung unter Eigenschaften des App-Pools => Registerkarte Leistung => Entfernen Sie das Häkchen bei "Arbeitsprozesse nach dem Leerlauf beenden".

Im Allgemeinen wird es als eine schlechte Idee betrachtet, lange laufende Aufgaben unter IIS zu hosten, da es viele Dinge gibt, die den Thread abbrechen oder den Prozess vollständig beenden können. Application Pool-Recycles sind die bekanntesten.

+0

Vielen Dank @driis für Sie kommentieren. –

2

Sie könnten einen Windows-Dienst-Host einen WCF-Endpunkt haben, der Ihre lange laufende Aufgabe startet. Windows Services sollen eine lange, lange Zeit haben und sind ideal für diese Situation.