Ich habe einen C # -WebService geschrieben. Das Problem besteht darin, dass es nach der Veröffentlichung in IIS nicht automatisch gestartet wird, wenn keine seiner Methoden aufgerufen wird. Dies ist sehr frustrierend, da dieser WebService unmittelbar nach dem Start einige Hintergrundarbeiten ausführen muss (sein Konstruktor wird ausgeführt). Wenn IIS neu gestartet wird, sitzt der WebService nur solange, bis eine seiner Methoden aufgerufen wird. Gibt es einen Weg, dies zu überwinden und den WebService zu zwingen, seinen Konstruktor sofort nach der Veröffentlichung oder dem Neustart von IIS auszuführen?
Wenn es unmittelbar nach dem Start ununterbrochen Hintergrundarbeit leisten soll, warum sollte dies nicht in einem Windows-Dienst implementiert werden? Ich denke, Sie können einen WCF-Dienst schreiben, der im Windows-Dienst gehostet wird. Auf diese Weise können Clients Ihren Dienst immer noch aufrufen, der Dienst kann seine Hintergrundarbeit erledigen und ist nicht von IIS abhängig, da der Host-Fenster-Dienst auf seinem eigenen Prozess ausgeführt wird.
Abgesehen von der (korrekten) Anmerkung, dass Sie einen Windows-Dienst für Dinge verwenden sollten, die im Hintergrund ausgeführt werden müssen: Können Sie das Application_Start-Ereignis in der Datei global.asax verwenden?
Ich stimme den anderen zu, Sie sollten einen Windows-Dienst verwenden. Wenn Sie WCF verwenden, können Sie Ihren Webdienst problemlos in einem Windows-Dienst hosten und das Beste aus beiden Welten herausholen. In diesem msdn-Artikel finden Sie ein Tutorial.
Und ich stimme nicht zu. Es gibt gute Gründe, dafür zu sorgen, dass ein Webservice mit dem Computer gestartet wird - damit er mit dem Füllen seiner Caches beginnen und / oder die langsame erste Ausführung vermeiden kann.
Das IIS-Team ist bei mir dabei. Deshalb haben sie dafür etwas entwickelt:
Dieses Modul kann sicherstellen, dass eine Website "warm" ist (wie in: gestartet), wenn IIS startet.
Tags und Links wcf .net windows-services web-services