快速检查WCF端点是否可用(如果不可用,则如何处理)
本文关键字:何处理 处理 WCF 是否 检查 如果不 端点 | 更新日期: 2023-09-27 18:27:48
我运行了一个非常简单的WCF服务。
ASP.NET web应用程序在页面加载过程中从代码后面使用此服务,如下所示:
try
{
using (var myWCFClient = new MyWCFClient())
{
int myInt = myWCFClient.GetValue();
}
}
catch (Exception ex)
{
}
其中"MyWCFClient"是在向我的项目添加服务引用时自动生成的代理对象。
一切都很好,但问题是当服务端点由于某种原因关闭时,EndpointNotFoundException需要30多秒才能被捕获。当然,这是不可接受的,因为它会延迟页面加载,因为所有内容都是同步的。因为我没有简单的机制在页面加载后异步地将数据推送到页面,所以对WCF服务的异步调用不是首选。
我还尝试将web.config中的sentTimeout设置为5秒,但这并不能解决问题。当将InnerChannel的OperationTimeout设置为5秒时,如下所示。。。
((IContextChannel)myWCFClient.InnerChannel).OperationTimeout = TimeSpan.FromSeconds(5);
我确实得到了一个TimeOutException,但这个异常不是在5秒内抛出的,它也需要超过30秒。。。
有人知道如何处理这种情况吗?或者有没有办法在进行实际呼叫之前快速检查服务是否正在运行???
我们在主机上使用一个ping函数,该函数只在响应负载中返回True,如果响应时间超过5秒,我们会抛出自己的异常并退出进程。所有的逻辑都在客户端,减去Ping()函数。我们不等待超时异常。