我有一个非常简单的 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 秒...
有谁知道如何处理这种情况,或者有没有办法在进行实际调用之前快速检查服务是否正在运行???