WCF超时未被尊重

时间:2013-04-02 22:38:41

标签: wcf timeout

我是一个广泛使用WCF的项目的新手,我对WCF的经验并不广泛。我正在尝试追踪一个问题,我的UI在10分钟后出现超时错误,同时等待长时间运行的服务调用返回。这里非常粗略是我的项目所需要的:

[service A] <=> [service B] <=> [UI console]

以下是我收集的内容:

  • serviceA和serviceB之间发生超时,而不是在serviceB和UI控制台之间,因为我实际上有两个独立的UI控制台:一个是MMC管理单元,一个是PowerShell管理单元,两者都展示同样的10分钟超时。

  • 我在serviceA和serviceB中的端点都使用basicHttpBinding;两者都有bindingConfigurations,在30分钟而不是10分钟指定sendTimeout和receiveTimeout。

  • ReliableSession.InactivityTimeout默认为我读过10分钟,但我不相信其中任何一个都是ReliableSession所以它不适用。

  • 我将serviceB用于WCF跟踪; ServiceTraceViewer在长时间运行的服务调用开始之前显示了相应的活动,之后没有任何内容,包括10分钟超时。

随意挑战我的任何断言和/或让我知道我还能做些什么来诊断这个问题。

2013.04.04更新

以下是实际的错误消息:

  

请求频道在等待回复后超时   00:09:59.9839984。增加传递给调用的超时值   请求或增加Binding上的SendTimeout值。时间   分配给这个操作可能是一个更长的一部分   超时。

     

服务器堆栈跟踪:at   System.ServiceModel.Channels.RequestChannel.Request(消息消息,   TimeSpan超时)at   System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息   消息,TimeSpan超时)at   System.ServiceModel.Channels.ServiceChannel.Call(String action,   Boolean oneway,ProxyOperationRuntime操作,Object [] ins,   对象[]出局,TimeSpan超时)at   System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage   methodCall,ProxyOperationRuntime operation)at   System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即时聊天   消息)

     

在[0]处重新抛出异常:at   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即时聊天   reqMsg,IMessage retMsg)at   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&安培;   msgData,Int32类型)at   NextIT.ActiveAdministration.DataContracts.IActiveAdministration.PublishAgentSettings()   在......

内在的例外:

  

对“http://localhost/MyAdminService/”的HTTP请求   已超过00:10:00分配的超时时间。分配给的时间   此操作可能是较长超时的一部分。

     

在   System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(引发WebException   webException,HttpWebRequest请求,HttpAbortReason abortReason)
  在   System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度   超时)at   System.ServiceModel.Channels.RequestChannel.Request(消息消息,   TimeSpan超时)

2 个答案:

答案 0 :(得分:0)

尝试使用操作超时,如下所述:http://final-proj.blogspot.co.il/2009/09/wcf-timeouts.html?m=1

此外,这种服务配置可能会导致超时,例如使用回调。 。 。 (来自这篇文章Timeouts WCF Services

答案 1 :(得分:0)

有一句古老的格言“如果它不起作用,请尝试将其插入。”我非常专注于通过app.config文件的痛苦曲折来解决问题大火和充满混乱 - 部分是因为在这个大型项目中实际上有5个app.config文件具有各种绑定和服务(!) - 我没有注意到代码覆盖配置文件的明显部分:

binding.ReceiveTimeout = new TimeSpan(0, 0, 10, 0);
binding.SendTimeout = new TimeSpan(0, 0, 10, 0);

叹息。

但等等 - 还有更多。我最初想知道为什么配置文件中的30分钟值没有效果,因为超时发生在10分钟?好吧,事实证明,如上所示,代码中的10分钟超时设置是从UI控制台到serviceB。配置文件中设置的30分钟超时时间是从serviceB到serviceA,所以我不得不打开两个更宽,以便继续长时间运行。