2009-08-25 11 views
8

Gibt es eine Möglichkeit, einen WebService zu initialisieren.C# Wie WebService initialisiert wird

Ich suche nach einer Methode, die nur während des ersten Aufrufs von WebService ausgeführt wird. Gibt es sowas in .Net?

+5

Haben Sie das erste Mal bedeuten, dass eine gegebene „Client“ in einer Sitzung des Web Service aufruft, die erste Mal, dass der Webdienst jemals aufgerufen wird, oder wenn er das erste Mal aufgerufen wird, seit IIS den Anwendungspool zuletzt rezykliert/gestartet hat? – Rob

Antwort

17

von meinem Kommentar zu Ihrer Frage Im Anschluss an ....

Wenn Sie benötigen „Initialisierung“ das erste Mal ein gegebener Client an den Web-Service verbindet: Haben sie eine „Initialisieren“ Methode, Gibt ein Token zurück, wie zum Beispiel Guid, das dann bei jedem Aufruf der eigentlichen "does the work" -Methode Ihres Webdienstes benötigt wird. Sie können dann sicherstellen, dass für diesen Client der Service immer initialisiert wird.

Wenn Sie es zum ersten Mal des Web-Service erfordern immer genannt wird: einige Codes zu Ihren Diensten hinzufügen, als private Methode, das heißt an der Spitze jeder öffentlichen Methode aufgerufen. Darin überprüfen Sie, ob etwas vorhanden ist, z. B. ein Registrierungseintrag, eine Datei, ein Datenbankeintrag oder ein anderer dauerhafter Wert. Wenn es nicht existiert, führen Sie Ihre Initialisierung durch und erstellen Sie dann das "Etwas".

Wenn Sie es auf den ersten Aufruf seit IIS zuletzt erfordern recycelt/begann die Anwendung Pool: Haben Sie einen statischen Konstruktor für die Klasse, so dass, wenn es zuerst die statischen Konstruktor läuft instanziiert und führt Ihre Initialisierung.

0

Nun, es gibt kein Äquivalent zur J2EE-Initialisierung, wenn Sie das wollen ... Jede Web-App wird jedoch in einer Anwendungsdomäne gehostet. Hin und wieder kann eine Anwendung wiederverwendet werden und eine neue Anwendungsdomäne kann erstellt werden ...

4

Wenn Sie in Visual Studio eine WebService-Anwendung erstellen, wird standardmäßig eine Klasse namens "Service" hinzugefügt. Wenn Sie sich den Code für diese Klasse (Service.cs) ansehen, sehen Sie einen Konstruktor ("public Service()") mit zwei auskommentierten Zeilen. Sie können entweder Ihren Initialisierungscode hier eingeben oder eine private Methode aufrufen, die Sie in der Klasse Service definiert haben. Dieser Konstruktor wird nur aufgerufen, wenn Ihr Client zum ersten Mal einen WebMethode in der Service-Klasse aufruft.

5

Wenn Sie versuchen, eine Ressource zu initialisieren, die vom Webdienst verwendet wird, und Sie diese nur einmal pro Anwendung initialisieren möchten, können Sie das Ereignis Application_Start für Global.asax verwenden. Beachten Sie, dass IIS den Anwendungspool immer dann wiederverwendet, wenn der Anwendungspool zu viele Ressourcen verbraucht.

Wenn Sie eine Variable auf Klassenebene initialisieren müssen, können Sie dies im Konstruktor des Web-Service tun. Ich würde das empfehlen, weil Ihr Web-Service staatenlos sein sollte. Wenn Sie eine statische Ressource einmal in Ihrem Webdienst initialisieren müssen, können Sie einen statischen Konstruktor verwenden.

Wenn Sie eine einzelne Ressource benötigen, die einmal in Ihrer Anwendung verfügbar ist, würde ich Ihnen empfehlen, das Singleton-Muster zu betrachten.

0

Sie können Application_Start in global.asax verwenden, wird es einmal ausgeführt, wenn eine Webservice in Ihrem Projekt

genannt wird
Verwandte Themen