2009-02-19 11 views

Antwort

9

Wenn Sie Client.Open aufrufen, wenn es unten ist, sollte eine Ausnahme auslösen, die Sie abfangen können.
Was ich bevorzuge, ist eine Methode zu implementieren, die einen booleschen Wert namens Ping zurückgibt. Der Code tut im Grunde nur return true;, so dass es so schnell wie möglich zurückkehrt. Auf der Client-Seite rufe ich es auf und trenne Ausnahmen, wenn ich irgendwelche bekomme, weiß ich, dass der Web-Service nicht verfügbar ist.
Sie können das Muster erweitern, um Dinge wie PingCheckDB oder PingCheckX zu machen, die einen Fake/Sample-Testlauf durchführen können, so dass Sie die Funktionalität auf dem Client je nach Verfügbarkeit aktivieren/deaktivieren.

+0

Jeder Beispielcode bitte. Danke –

+1

@ Alhmabra die Methode würde aussehen wie öffentliche bool Ping() { zurück wahr; } Wirklich nicht die interessanteste Methode. –

+0

Open() löst keine Ausnahme aus, wenn ich das Netzwerk deaktiviere. – nurettin

7

Um auf die vorherige Antwort näher zu kommen: Die einzige Möglichkeit zu bestimmen, ob ein Dienst "verfügbar" ist, ist zuerst festzustellen, was Sie mit "verfügbar" meinen. Zum Beispiel kann ein Service, der von einer externen Ressource wie einer Datenbank abhängt, perfekt verfügbar sein, aber wenn auf die Datenbank nicht zugegriffen werden kann, ist der Service verfügbar, aber nutzlos.

Sie sollten auch fragen, was Sie mit den Informationen über die Verfügbarkeit tun werden. Vor allem, was passieren würde, wenn Sie entschieden hätten, dass der Dienst "verfügbar" war, und wenn Sie ihn anrufen, stellen Sie fest, dass er nicht wirklich "verfügbar" ist. Ein Beispiel wäre, wenn der obige Dienst verfügbar wäre und die Datenbank verfügbar wäre, aber es eine bestimmte gespeicherte Prozedur gab, die immer fehlschlagen würde. Ist der Service in diesem Fall "verfügbar"? Wie schlimm wäre es, wenn Sie angeben, dass es verfügbar ist, aber diese eine gespeicherte Prozedur ist fehlgeschlagen?

In vielen Fällen ist es am besten, einfach weiterzumachen und die Aufrufe an den Webdienst zu tätigen und dann Ausnahmen zu behandeln. Wenn Sie die Parameter validiert haben, die Sie an den Dienst senden, bedeutet dies aus Sicht des Endbenutzers, dass ein Ausfall des Dienstes dazu führt, dass der Dienst nicht verfügbar ist.

Es ist nicht verfügbar, erfolgreich verwendet zu werden, Sie sehen.

0

Dies ist, was ich benutze und es funktioniert gut. Und ServiceController lebt im Namespace 'System.ServiceProcess', wenn Sie oben eine Using-Anweisung verwenden möchten, um sie zu qualifizieren.

try 
{ 
    ServiceController sc = new ServiceController("Service Name", "Computer's IP Address"); 
    Console.WriteLine("The service status is currently set to {0}", 
     sc.Status.ToString()); 

    if ((sc.Status.Equals(ServiceControllerStatus.Stopped)) || 
     (sc.Status.Equals(ServiceControllerStatus.StopPending))) 
    { 
     Console.WriteLine("Service is Stopped, Ending the application..."); 
     Console.Read(); 
     EndApplication(); 
    } 
    else 
    { 
     Console.WriteLine("Service is Started..."); 
    } 
} 
catch (Exception) 
{ 
    Console.WriteLine("Error Occurred trying to access the Server service..."); 
    Console.Read(); 
    EndApplication(); 
} 
0

Ich benutze den folgenden Code. Es ist einfach und funktioniert ...

public bool IsServiceRunning() 
    { 
     try 
     { 
      System.Net.WebClient wc = new System.Net.WebClient(); 
      string s = wc.DownloadString(new Uri("http://localhost:27777/whatever/services/GatherDataService?wsdl")); 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

     return true; 
    } 

nur Ihren Endpunkt uri nehmen und fügen Sie das? Wsdl

Verwandte Themen