如何了解 WCF 服务可用性



在进行服务调用之前,我想知道 WCF 服务是否可用。最好的方法是什么?

如何使用这个:

bool isServiceUp = true;
try
{
   string address = "http://localhost/MyService.svc?wsdl";
 MetadataExchangeClient mexClient = new MetadataExchangeClient(new Uri(address), MetadataExchangeClientMode.HttpGet);
   MetadataSet metadata = mexClient.GetMetadata();
// if service down I get the exception
}
   catch (Exception ex)
{
    isServiceUp = false;
} 

我的服务正在使用网络 tcp 绑定。

我可以将其用于净TCP绑定吗?

编辑:谢谢贾里德帕尔。假设我的第一个调用成功,而第二个调用服务器关闭。因此,在进行服务调用之前,我检查处于 OPEN 状态的代理的状态,因此我进行最终超时的服务调用。我没有设置任何打开或关闭超时,因此默认情况下需要 1 分钟,并且调用在我在其中释放代理的服务的 Fault 事件处理程序中捕获。但是到那时UI挂起了,我该怎么办?

请指导。

这种类型的

测试根本不可能。 在尝试之前,无法可靠地检测给定的 WCF 或任何网络调用是否会成功。 有太多的变量是你无法控制的。

  • 物理网络
  • 运行 WCF 的计算机上的电源
  • 实际的 WCF 程序
  • 运行代码或 WCF 代码的计算机上硬盘驱动器的稳定性

其中任何一个都可以在任何时间点终止/更改。 因此,无法预测给定的调用是否会成功。

解决此问题的最佳方法是让调用添加代码以处理失败的情况。

试试下面的代码,它对我有用。ServiceController 类位于"System.ServiceProces"命名空间中。

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

最新更新