我是一个新手,加入了一个广泛使用WCF的项目,我的WCF经验并不丰富。我正在尝试追踪一个问题,即当等待长时间运行的服务调用返回时,我的UI在10分钟后会出现超时错误。大致来说,我的项目包括以下内容:
[service A] <=> [service B] <=> [UI console]
目前我了解到的情况如下:
超时发生在serviceA和serviceB之间,而不是在serviceB和UI控制台之间,因为我实际上有两个单独的UI控制台:一个是MMC快照,另一个是PowerShell快照,并且两者都表现出相同的10分钟超时。
我的serviceA和serviceB中的终结点使用basicHttpBinding; 两者都具有指定sendTimeout和receiveTimeout为30分钟的bindingConfigurations,而不是10分钟。
ReliableSession.InactivityTimeout默认为10分钟,但我认为这两个都不是ReliableSession,因此不适用。
我为WCF跟踪工具添加了serviceB; ServiceTraceViewer显示了适当的活动,直到长时间运行的服务调用开始,然后在包括10分钟超时在内的之后没有任何内容。
欢迎对我的任何断言提出质疑和/或让我知道我可以做什么来诊断此问题。
2013.04.04更新
以下是实际的错误消息:
The request channel timed out while waiting for a reply after 00:09:59.9839984. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.
Server stack trace: at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at NextIT.ActiveAdministration.DataContracts.IActiveAdministration.PublishAgentSettings() at ...
内部异常:
HTTP请求'http://localhost/MyAdminService/
'已超过00:10:00的允许超时时间。此操作所分配的时间可能只是更长超时时间的一部分。在System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)处, 在System.ServiceModel.Channels.HttpChannelFactory'1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)处等待回复的时间已超时。 在System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)处。