检查WCF Web服务的可用性

时间:2009-02-19 12:24:32

标签: wcf

我想通过C#代码检查WCF Web服务i.c服务的可用性是上升还是下降。如何实现?

4 个答案:

答案 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