Laden...

Windows Service mit ASP.NET stoppen und starten

Erstellt von schuppsl vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.730 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren
Windows Service mit ASP.NET stoppen und starten

Hallo, mal wieder was spezielles.

In meiner ASP.NET Anwendung möchte ich dem Admin die Möglichkeit geben, den Webserver (cassini) neu zu starten.
Ich habe auch eine Windows Forms Anwendung mit der das einwandfrei funktioniert, nur mit der ASP.NET Anwendung nicht.

Der Dienst wird zwar beendet, aber nicht mehr neu gestartet.
Der einzige Unterschied zwischen der Forms und ASP Anwendung der mir einfällt ist, daß die Forms Anwendung als Administrator bzw. als User mit Admin Rechten ausgeführt wird.
Die ASP Anwendung ja nicht.

Trotzdem ist es seltsam, daß der Dienst trotzdem gestoppt wird, also denke ich mir, daß es nicht daran liegt.
Eher daran, daß die ASP Anwendung den Dienst einstellt, sobald der Webserver auf der sie läuft beendet wird.
Ist ja auch mehr als logisch, aber die Funktion zum Stop und Start sollte doch trotzdem noch ausgeführt werden, auch ohne Webserver...ist ja Codebehind und hat nichts mit der Oberfläche zu tun...

Hängt das doch so zusammen?

Schon, gell?

Wie kann man das dann lösen?

Hier der Code:


   public void RestartService(string serviceName, int timeoutMilliseconds)
     {         

         ServiceController service = new ServiceController(serviceName);
         try
         {
             int millisec1 = Environment.TickCount;
             TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
             clog.WriteLine("--Service hier", false);
             if (service.Status == ServiceControllerStatus.Running)
             {  
                 service.Stop();
               

                 service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
      

             }


             // count the rest of the timeout
             int millisec2 = Environment.TickCount;
             timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2 - millisec1));

             service.Start();
             service.WaitForStatus(ServiceControllerStatus.Running, timeout);



         }
         catch (Exception ex)
         {

             // ...
             throw new Exception(ex.Message, ex.InnerException);
             
         }
     }


Edit: jetzt stimmt der Code

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

aber die Funktion zum Stop und Start sollte doch trotzdem noch ausgeführt werden, auch ohne Webserver...ist ja Codebehind und hat nichts mit der Oberfläche zu tun...

Nein, wenn der Webserver beendet wird wird gar nix mehr ausgeführt. Der CodeBehind läuft ja innerhalb des Webservers. Deswegen ist es klar, dass der Start-Befehl nicht mehr ausgeführt wird.

Du könntest eine Batch-Datei (.cmd) erstellen und den Dienst darüber stoppen und starten, indem Du sie mit Process.Start ausführst:

net stop myServiceName
net start myServiceName

Eine Antwort auf den Request, mit dem Du den Dienst stoppst, wirst Du beim Client natürlich auch nicht erhalten.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 13 Jahren

Ja, ist ja eigentlich schon logisch.

Habe inzwischen eine .exe gebaut, welche ich per

     System.Diagnostics.Process.Start(pfad);

aufrufe und die den Server neu startet...funzt.

Grüßle