C # Wie WebService initialisiert wird

9

Gibt es eine Möglichkeit, einen WebService zu initialisieren?

Ich suche nach einer Methode, die nur beim ersten Aufruf von WebService ausgeführt wird. Gibt es sowas in .Net?

    
Darqer 25.08.2009, 14:29
quelle

5 Antworten

17

Nach meinem Kommentar zu Ihrer Frage ....

Wenn Sie beim ersten Verbinden eines bestimmten Clients mit dem Web-Service "Initialisierung" benötigen: Haben Sie eine "Initialize" -Methode, die ein Token, wie z. B. eine GUID, zurückgibt, die dann bei jedem Aufruf der aktuellen "does the work" -Methode Ihres Webdienstes benötigt wird. Sie können dann sicherstellen, dass der Service für diesen Client immer initialisiert wird.

Wenn Sie es das erste Mal benötigen, dass der Web-Service jemals aufgerufen wird: Fügen Sie Ihrem Dienst als private Methode einen Code hinzu, der am Anfang jeder öffentlichen Methode aufgerufen wird. 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 beim ersten Aufruf benötigen, seit IIS den Anwendungspool zuletzt recycelt / gestartet hat: Haben Sie einen statischen Konstruktor für die Klasse, sodass der statische Konstruktor bei der ersten Instanziierung ausgeführt wird und Ihre Initialisierung durchführt.

    
Rob 25.08.2009, 14:39
quelle
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 in Ihrer gesamten Anwendung einmal verfügbar ist, würde ich Ihnen empfehlen, sich das Singleton-Muster anzusehen.

    
sbeardsley 25.08.2009 14:57
quelle
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.

    
MusiGenesis 25.08.2009 14:50
quelle
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 ...

    
Robban 25.08.2009 14:41
quelle
0

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

    
Whuppa 25.04.2013 09:36
quelle