我需要向WCF服務發送大約10,000行數據,WCF服務又將其逐個插入到數據庫中。這個過程需要1個多小時。但是,從開始操作一小時後,我得到一項未發現的服務,我相信這是一段時間以後的事情。 但是,只要Visual Studio開發服務器繼續運行,服務就會繼續將此數據插入到數據庫中。如何防止調用由Silverlight客戶端創建的WCF服務獲取超時
我已經嘗試在客戶端和服務端設置所有超時值到2小時,但它沒有幫助。
的web.config服務:
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDService" allowCookies="true" maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647" closeTimeout="02:00:00"
openTimeout="02:00:00" receiveTimeout="02:00:00" sendTimeout="02:00:00">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647"/>
<security mode="None"/>
</binding>
</basicHttpBinding>
</bindings>
在客戶端(在初始化serviceclient)
this.binding.ReceiveTimeout = TimeSpan.FromHours(2);
this.binding.OpenTimeout = TimeSpan.FromHours(2);
this.binding.SendTimeout = TimeSpan.FromHours(2);
this.binding.CloseTimeout = TimeSpan.FromHours(2);
this.binding.MaxBufferSize = int.MaxValue;
this.binding.MaxReceivedMessageSize = int.MaxValue;
我做了一些搜索,並在很多地方被建議增加OperationTimeout。所以我嘗試了但沒有任何成功。
((IContextChannel)base.Channel).OperationTimeout = new TimeSpan(2, 0, 0);
請給我一些想法,我應該嘗試使服務完成整個操作並將響應發送回客戶端。 另外,讓我知道如果你認爲有更好的方法來做這個操作。
非常感謝您的建議。我絕對可以直接嘗試第二和第三。不過,第一點對我來說不是很清楚。你是否暗示使用雙工綁定來讓服務發送多個響應? – Raj
另外我想知道爲什麼手術會在開始後的一個小時內中斷。 – Raj
首先是發送記錄(和以前一樣),服務返回「收到的數據,我正在處理它,你可以使用這個ID獲得狀態」。然後你可以通過id來請求狀態(狀態可以是寫了多少條記錄等)。完成狀態後,您可以使用該ID查詢結果。這有點複雜,但是暫停幾個小時不是一個好方法。 – Casperah