2013-04-02 38 views
4

我是新來的是廣泛使用WCF和我與WCF的經驗是不是豐富的項目。我試圖追查在我的UI 10分鐘後呈現超時錯誤在等待一個長期運行的服務調用返回的問題。大致來說這裏是我的項目需要:WCF超時未兌現

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

,這裏是我所蒐集thusfar:serviceA和serviceB之間發生

  • 超時,不serviceB和UI控制檯之間,因爲我實際上有兩個獨立的UI控制檯:一個是MMC管理單元和一個爲PowerShell管理單元,並且都表現出相同的10分鐘的超時。

  • 我在這兩個serviceA和serviceB使用basicHttpBinding的端點;都有bindingConfigurations,指定30分鐘的sendTimeout和receiveTimeout,而不是10分鐘。

  • ReliableSession.InactivityTimeout默認爲10分鐘我已閱讀,但我不相信這些是ReliableSession,因此它不適用。

  • 我檢測了serviceB for WCF tracing; ServiceTraceViewer表現出適當的活動到長時間運行的服務電話,再沒有什麼開始,截至及包括10分鐘超時後。

隨時挑戰我的任何斷言和/或讓我知道我能做些什麼來診斷這個問題。

2013年4月4日更新

下面是實際的錯誤消息:

請求信道超時而後 00等待答覆:09:59.9839984。將傳遞給調用的超時值增加到 請求或增加綁定上的SendTimeout值。分配給此操作的時間 可能是更長的 超時的一部分。

服務器堆棧跟蹤:在在 系統 System.ServiceModel.Channels.RequestChannel.Request(消息消息,時間跨度 超時)在 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息 消息,時間跨度超時)。 ServiceModel.Channels.ServiceChannel.Call在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage 包括methodCall,ProxyOperationRuntime操作(字符串動作, 布爾單向,ProxyOperationRuntime操作,對象[]插件, 對象[]奏,時間跨度超時) )在 System.ServiceModel.Channels.ServiceChannelProxy.Invo科(即時聊天 消息)[0]時

異常重新拋出:在 在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即時聊天 reqMsg,即時聊天retMsg)System.Runtime.Remoting.Proxies.RealProxy。 PrivateInvoke(MessageData & msgData,Int32 type) NextIT.ActiveAdministration.DataContracts.IActiveAdministration。PublishAgentSettings() 在...

而且內部異常:

HTTP請求到 'http://localhost/MyAdminService/' 已經超過了00:10:00的分配超時。分配給 此操作的時間可能是較長超時的一部分。

在 System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(引發WebException 引發WebException,HttpWebRequest的請求,HttpAbortReason abortReason)
在 System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(時間跨度 超時)在 System.ServiceModel.Channels.RequestChannel.Request(消息消息,時間跨度 超時)

+0

你是否也嘗試玩打開和關閉超時? – evgenyl

+0

openTimeout和closeTimeout都設置爲1分鐘,所以它們不會是罪魁禍首;我對這些參數的看法似乎也支持這一事實。 –

回答

1

有一句古老的格言「如果它不起作用,請嘗試插入它。」我很專注於通過app.config文件的悲慘曲折充滿了大火和充滿混淆 - 部分原因是實際上有5個app.config文件,這些文件中包含各種綁定和服務項目(!) - 我沒有注意到代碼覆蓋配置文件的明顯部分:

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

感嘆。

但等等 - 還有更多。我最初是在撓撓我的頭,因爲超時發生在10分鐘,爲什麼配置文件中的30分鐘值沒有效果?那麼,事實證明,如上所示,代碼中的10分鐘超時設置 - 從UI控制檯到serviceB。配置文件中的30分鐘超時設置是從serviceB到serviceA的,所以我必須打開兩個加寬以讓長時間運行的操作繼續。

0

嘗試用操作超時玩,如下所述:http://final-proj.blogspot.co.il/2009/09/wcf-timeouts.html?m=1

此外,此類服務配置會導致超時,例如使用回調。 。 。 (從這個職位Timeouts WCF Services

+0

感謝您的建議。我確實設法找到了OperationTimeout,並確認它已被設置爲30分鐘,正如預期的那樣(因爲根據您的來源,它是從SendTimeout中設置的),所以似乎並不是問題所在。 –