我想通过C#代码检查WCF Web服务i.c服务的可用性是上升还是下降。如何实现?
答案 0 :(得分:9)
当你致电Client.Open
时,如果它已经失效,应该抛出一个可以捕获的异常
我更喜欢做的是实现一个返回一个名为Ping的布尔值的方法。代码基本上只是return true;
,所以它尽可能快地返回。在客户端我调用它并捕获异常,如果我得到任何,那么我知道Web服务已关闭
您可以扩展模式以执行PingCheckDB或PingCheckX等可以执行假/样本测试运行的操作,以便根据可用的内容启用/禁用客户端上的功能。
答案 1 :(得分:7)
详细说明上一个答案:确定服务是否“可用”的唯一方法是首先确定“可用”的含义。例如,依赖于外部资源(如数据库)的服务可能完全可用,但如果无法访问数据库,那么该服务将可用但无用。
您还应该询问您将如何处理有关可用性的信息。特别是,如果您确定该服务“可用”会发生什么,当您调用它时,您会发现它并非真正“可用”。例如,如果上述服务可用且数据库可用,但有一个特定的存储过程总是会失败。在这种情况下,服务“可用”吗?如果您指出它可用,但这个存储过程失败了会有多糟糕?
在许多情况下,最好只需继续调用Web服务,然后处理任何异常。如果您已验证了要发送给服务的参数,那么从最终用户的角度来看,服务的任何故障都会导致服务不可用。
您看,它无法成功使用。
答案 2 :(得分:0)
这就是我正在使用它并且效果很好。如果要在顶部使用Using语句来限定它,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();
}
答案 3 :(得分: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;
}
只需使用您的端点uri并添加?wsdl