Wie starte ich automatisch einen C # WebService?

8

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?

    
hancock 24.03.2010, 08:06
quelle

9 Antworten

10

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.

    
Ashish Gupta 24.03.2010 08:08
quelle
4

Wenn Sie es ständig benötigen, ist Ihr Design fehlerhaft. Erstellen Sie stattdessen einen Windows-Dienst.

    
leppie 24.03.2010 08:08
quelle
3

Ich glaube nicht, dass ein Web-Service ständig Hintergrundarbeit leisten soll - er dient dazu, Anfragen für seine Methoden zu bedienen.

    
Axarydax 24.03.2010 08:09
quelle
1

Sie müssen einen Windows-Dienst erstellen. Hier sind die Schritte zum Erstellen des Windows-Dienstes für geplante Aufgaben.

    
Brij 24.03.2010 08:12
quelle
1

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?

    
Michael Stum 24.03.2010 08:13
quelle
1

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.

    
Jonas H 24.03.2010 08:13
quelle
1

Tatsächlich können Sie einen Thread oder einen Job automatisch in "Global.asax.cs" ausführen. Z.B.   

%Vor% Und vergessen Sie nicht, den Thread zu schließen, wenn Ihre Site-Anwendung beendet wird. %Vor%     
jujusharp 24.03.2010 08:34
quelle
0

IIS 7.5 unterstützt diese Anforderung durch eine Erweiterung, Anwendungsinitialisierungsmodul für IIS 7.5, Ссылка .

IIS 8.0 verfügt über integrierte Unterstützung: Ссылка .

    
user3147314 30.12.2013 18:57
quelle
-1

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.

    
TomTom 24.03.2010 08:16
quelle