我有一个非常简单的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秒......
有人知道如何处理这种情况,还是有办法在进行实际调用之前快速检查服务是否正在运行?
答案 0 :(得分:0)
我们在主机上使用ping函数,它只在响应有效负载中返回True,如果响应时间超过5秒,我们抛出自己的异常并退出进程。所有逻辑都在客户端,减去Ping()函数。我们不会等待超时异常。