проверить доступность веб-службы WCF - PullRequest
9 голосов
/ 19 февраля 2009

Я хочу проверить доступность веб-службы WCF. Служба i.c включена или отключена с помощью кода C #. Как этого добиться?

Ответы [ 4 ]

9 голосов
/ 19 февраля 2009

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

7 голосов
/ 19 февраля 2009

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

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

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

Он недоступен для успешного использования.

0 голосов
/ 27 октября 2017

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

    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

0 голосов
/ 12 марта 2014

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

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...