在WCF代理上调用异步方法时超时

时间:2015-03-13 08:17:25

标签: .net wpf wcf asynchronous async-await

我正在尝试从WPF客户端测试我构建的一个小型WCF服务,当我在服务代理上调用异步方法时,我得到TimeoutException

async void ExecuteProcessNowCommand()
{
    try
    {
        await _proxy.ProcessAsync(true);
    }
    catch (FaultException<FaultExceptionData> fix)
    {
        MessageBoxFacility.ProcessingError(fix.Detail.ExceptionType + ": " + fix.Detail.Message, fix.Detail.StackTrace);
    }
}

此代码来自我的viewmodel,以响应按钮的命令。

未处理的异常,而不是来自FaultException。这里的实际时机是什么时候?我假设await不会阻塞并超时,所以我怀疑它在其他地方,但await可能导致超时?异常消息是:

  

类型&#39; System.TimeoutException&#39;的例外情况发生在   mscorlib.dll但未在用户代码中处理

     

其他信息:HTTP请求   &#39; http://localhost:8089/TestService/SchedulerService/&#39;已经超过了   分配超时00:01:00。分配给此操作的时间可能   是超时的一部分。

WCF托管在Windows服务中,该服务在调用方法时运行。我应该从哪里开始寻找诊断?

1 个答案:

答案 0 :(得分:2)

WCF has a timeout on many operations。操作是否为async并不重要。默认情况下,大多数WCF超时都是一分钟,这符合您的例外情况。

可用的超时时间为:

  1. OpenTimeout
  2. CloseTimeout
  3. 的SendTimeout
  4. ReceiveTimeout
  5. 在您的情况下,相关超时可能是SendTimeout,因为操作可能超过一分钟。

    此异常System.TimeoutException不会在FaultException下,因为它是客户端异常,它不是来自服务器。

    如果要处理此异常,则需要添加适当的catch子句。要消除此异常,您需要确保操作不超过分配的时间或将超时配置增加到更合理的值。