0

我有一个非常简单的 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 秒...

有谁知道如何处理这种情况,或者有没有办法在进行实际调用之前快速检查服务是否正在运行???

4

1 回答 1

0

我们在主机上使用 ping 函数,它在响应负载中简单地返回 True,如果您的响应时间超过 5 秒,我们会抛出自己的异常并退出进程。所有逻辑都在客户端,减去 Ping() 函数。我们不等待超时异常。

于 2013-08-14T10:55:28.530 回答