2011-07-13 67 views
2

我有一個Silverlight客戶端和WCF C#服務器之間的雙工TCP連接。服務器不斷向客戶端推送更新。但是,大約10分鐘的用戶不活動後,發送到服務器的任何用戶操作都會導致異常,儘管更新成功繼續。我應該在哪裏增加ReceiveTimeout?

鑑於涉及的時間段和客戶端的不活動,我猜測它涉及ReceiveTimeout設置。但是,當我嘗試在客戶端上設置它時(見下文),它不能解決這個問題。

 CustomBinding binding = new CustomBinding(new BinaryMessageEncodingBindingElement(), 
      new TcpTransportBindingElement()); 
     binding.ReceiveTimeout = TimeSpan.MaxValue; 
     EndpointAddress address = new EndpointAddress(testAddress); 

     testClient = new TestClient(binding, address); 

我需要設置此服務器端,以及或代替客戶端嗎?

如果我確實需要在服務器上設置它,我將如何執行此操作,因爲我使用OperationContext.Current.GetCallbackChannel<ITestClient>()來獲取回調接口?

回調接口不允許我訪問屬性來設置超時,我不確定要將它投射到什麼位置才能啓用此功能。我試着在服務器端的ServiceHost上設置它,但是這也沒有解決它。

回答

0

原來的答案是:沒關係。在客戶端設置它在技術上是正確的,但根據Configuring Web Service Usage in Silverlight Clients

注意:receiveTimeout的這個值是不被推崇 Silverlight 4中,並設置它不會影響 應用程序的行爲。

我已經測試過並驗證過它。

答案最終每四分鐘實施一次對服務器的保持活動呼叫(選擇四分鐘是因爲它是十分鐘接收超時的一半,減去一個緩衝區)。

0

我認爲你應該設置在雙方。

您可能嘗試獲取服務端使用的綁定(通過ServiceHost.Description)並設置其ReceiveTimeout。

我不明白你爲什麼不直接使用netTcpBinding並使用web.config或app.config?

+0

NetTcpBinding不直接在Silverlight中可用。要使用它,你需要使用上面的模式。 – dlanod

1

我會在客戶端和服務器上配置擴展的OpenTimeout,ReceiveTimeout和SendTimeout。