如何了解 WCF 服务可用性
本文关键字:WCF 服务 可用性 了解 何了解 | 更新日期: 2023-09-27 18:36:11
在进行服务调用之前,我想知道 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();
}