2009-08-06 6 views
1

Ok, also habe ich Call1 in einem Webservice, der einen bacground-Worker-Thread startet, um mit der Verarbeitung zu beginnen, möchte aber einen anderen Call (Call2) haben, der den ursprünglichen Worker-Thread über a überwacht Referenz?Background Worker Thread im WebService-Kontext

Irgendwelche Vorschläge, wie man das macht? Ich möchte mich wirklich von einem WinService fernhalten, um meine Verarbeitung durchzuführen. Wie ich es brauche, um in Echtzeit zu sein.

+0

Ich bin mir nicht sicher, ob ich verstehe, was Sie mit Call2 meinen, um den Thread "zu überwachen". Meinst du damit, dass Call2 einen Fortschrittsstatus in Bezug auf die Aufgabe, die der Thread macht, betrachtet und dem Anrufer Bericht erstattet? – AnthonyWJones

+0

Yip das ist genau was ich brauche. Ich denke, ich habe hier eine Antwort gefunden ... http://StackOverflow.com/Questions/228775/net-Web-Service-backgroundworker-threads –

+0

Dies funktioniert, aber nicht einen guten Mechanismus, um diesen Thread von Call2 zu überprüfen. –

Antwort

2

Ich sehe nicht, warum die Verwendung einer Dienstanwendung ein Problem sein sollte. Die Dienste laufen ständig und die Überwachung kann in Echtzeit erfolgen.

Aber wenn Sie wirklich nicht so gehen wollen, dann gibt es andere Möglichkeiten. Es ist möglich, einen neuen Thread zu starten, den ThreadPool zu verwenden oder einen neuen Thread manuell zu starten. Dieser Thread wird im Hintergrund des Anwendungspools ausgeführt, in dem der Webdienst ausgeführt wird.

Möglicherweise möchten Sie dafür eine Task-Scheduler-Bibliothek verwenden. Schauen Sie sich hierzu Quartz.net an.

Beachten Sie, dass die Anwendungsdomäne, in der Ihr Webdienst ausgeführt wird, jederzeit beendet werden kann, wenn IIS dies für erforderlich erachtet. Daher kann nicht garantiert werden, dass der Job abgeschlossen wird. Das Verwenden einer Dienstanwendung wird das beheben.

+0

Ich habe nicht über das Problem mit der App-Domain nachgedacht. Sie haben Recht, das wird überhaupt nicht sicher sein ... Wie einfach ist es, ein direktes Ereignis an den Windows-Dienst zu senden, anstatt sich auf einen Timer zu verlassen, um die Datenbank nach einem neuen Job zu durchsuchen? –

+1

Wenn Sie auf .NET 3.5 sind, können Sie einen Webdienst direkt in Ihrer Dienstanwendung mithilfe von WCF hosten. Auf diese Weise können Sie Methoden offenlegen, die direkt mit Ihrem Service interagieren. Wenn dies keine Option ist, können Sie Remoting verwenden, um über Ihren Webdienst mit Ihrer Dienstanwendung zu kommunizieren. Es ist nicht sehr schwierig, aber unbeholfener als der WCF-Ansatz. –

Verwandte Themen