2009-02-19 3 views

ответ

9

Когда вы вызываете Client.Open, если он не работает, это должно вызвать исключение, которое вы можете использовать.
Что я предпочитаю делать, это реализовать метод, который возвращает логическое значение, называемое Ping. Код в основном просто return true;, поэтому он возвращается как можно быстрее. На стороне клиента я называю это и ловушки исключения, если я получу, то я знаю, что веб-сервис не работает.
Вы можете расширить шаблон, чтобы делать такие вещи, как PingCheckDB или PingCheckX, которые могут выполнять поддельный/пробный прогон, чтобы вы включили/отключили функциональность на клиенте на основе того, что доступно.

+0

Любой образец кода, пожалуйста. Спасибо –

+1

@Alhmabra метод будет выглядеть как общественный bool Ping() { return true; } Действительно не самый интересный метод. –

+0

Open() не вызывает исключения при отключении сети. – nurettin

7

Чтобы уточнить предыдущий ответ: единственный способ определить, доступна ли услуга, - это сначала определить, что вы имеете в виду под «доступным». Например, служба, которая зависит от внешнего ресурса, такого как база данных, может быть совершенно доступной, но если доступ к базе данных невозможен, служба будет доступна, но будет бесполезной.

Вы также должны спросить, что вы собираетесь делать с информацией о доступности. В частности, что произойдет, если вы решите, что услуга «доступна» еще, когда вы ее назовете, вы обнаружите, что она действительно не «доступна». Например, если вышеупомянутая служба была доступна и база данных была доступна, но была одна конкретная хранимая процедура, которая всегда терпит неудачу. В этом случае услуга «доступна»? Насколько это плохо, если бы вы указали, что он доступен, но эта хранимая процедура не удалась?

Во многих случаях лучше всего просто выполнить вызовы веб-службы и обработать любые исключения. Если вы подтвердили параметры, которые вы отправляете в службу, то с точки зрения конечного пользователя любой сбой службы уменьшает недоступность службы.

Он не может быть успешно использован, вы видите.

0

Это то, что я использую, и оно отлично работает. И ServiceController живет в пространстве имен «System.ServiceProcess», если вы хотите использовать инструкцию «Использовать» вверху, чтобы ее квалифицировать.

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

Я использую следующий код. Это просто и работает ...

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; 
    } 

просто взять конечную точку Ури и добавить? WSDL