2015-03-13 52 views
2

我想测试一个微小的WCF服务,我已经建立,从一个WPF客户端,我得到一个TimeoutException当我打电话的服务代理异步方法:超时在WCF代理调用异步方法时

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。实际上什么时候在这里超时?我假设等待不会阻止并获得超时,所以我怀疑它是在其他地方,但可能会导致超时?异常消息为:

的类型“System.TimeoutException”异常发生在 mscorlib.dll中但在用户代码中没有处理

附加信息:HTTP请求到 “http://localhost:8089/TestService/SchedulerService/”已经超过了 分配的超时时间为00:01:00。分配给此操作的时间可能是 已成为较长超时的一部分。

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

回答

2

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

可用的超时值:

  1. OpenTimeout
  2. CloseTimeout
  3. 的SendTimeout
  4. ReceiveTimeout

在你的情况下,相关的超时可能的SendTimeout作为操作可能超过一分钟。

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

如果你想处理这个异常,你需要添加一个合适的catch子句。要摆脱此异常,您需要确保操作不超过分配的时间,或者将超时配置增加到更合理的值。

+0

谢谢。我会很快给它一个旋转,但你给了我一个很好的起点,为一个非常困难和匆忙的大脑。 – ProfK 2015-03-13 09:42:36