Я хочу проверить доступность веб-службы WCF. Служба i.c находится вверх или вниз по C# -коду. Как это сделать?проверить наличие веб-службы WCF
ответ
Когда вы вызываете Client.Open
, если он не работает, это должно вызвать исключение, которое вы можете использовать.
Что я предпочитаю делать, это реализовать метод, который возвращает логическое значение, называемое Ping. Код в основном просто return true;
, поэтому он возвращается как можно быстрее. На стороне клиента я называю это и ловушки исключения, если я получу, то я знаю, что веб-сервис не работает.
Вы можете расширить шаблон, чтобы делать такие вещи, как PingCheckDB или PingCheckX, которые могут выполнять поддельный/пробный прогон, чтобы вы включили/отключили функциональность на клиенте на основе того, что доступно.
Любой образец кода, пожалуйста. Спасибо –
@Alhmabra метод будет выглядеть как общественный bool Ping() { return true; } Действительно не самый интересный метод. –
Open() не вызывает исключения при отключении сети. – nurettin
Чтобы уточнить предыдущий ответ: единственный способ определить, доступна ли услуга, - это сначала определить, что вы имеете в виду под «доступным». Например, служба, которая зависит от внешнего ресурса, такого как база данных, может быть совершенно доступной, но если доступ к базе данных невозможен, служба будет доступна, но будет бесполезной.
Вы также должны спросить, что вы собираетесь делать с информацией о доступности. В частности, что произойдет, если вы решите, что услуга «доступна» еще, когда вы ее назовете, вы обнаружите, что она действительно не «доступна». Например, если вышеупомянутая служба была доступна и база данных была доступна, но была одна конкретная хранимая процедура, которая всегда терпит неудачу. В этом случае услуга «доступна»? Насколько это плохо, если бы вы указали, что он доступен, но эта хранимая процедура не удалась?
Во многих случаях лучше всего просто выполнить вызовы веб-службы и обработать любые исключения. Если вы подтвердили параметры, которые вы отправляете в службу, то с точки зрения конечного пользователя любой сбой службы уменьшает недоступность службы.
Он не может быть успешно использован, вы видите.
Это то, что я использую, и оно отлично работает. И 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();
}
Я использую следующий код. Это просто и работает ...
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
любое окончательное решение с полным исходным кодом? – Kiquenet