2016-03-03 88 views
2

我正在Winform客戶端使用WCF服務。我通過多次調用WCF服務來創建數據緩存。通信對象不能用於通信,因爲它處於Faulted狀態

我的服務調用的一個失敗,因爲錯誤的...

The communication object,System.ServiceModel.Security.SecuritySessionClientSettings 1 + ClientSecurityDuplexSessionChannel [System.ServiceModel.Channels.IDuplexSessionChannel],不能用於通信,因爲它處於故障state.`

代碼塊,這是拋出錯誤......

return _wcfClient.GetGroups().ToList()); 

這個錯誤行爲是隨機的。有時它沒有任何問題,有時它拋出給定的錯誤 我厭倦調試問題,但客戶端調用永遠不會到達WCF服務。

能否幫助我理解爲什麼會發生這種情況,我該如何解決這個問題。

與代碼更新問題:

我使用casle溫莎DI解決依賴關係。 這就是如何與DI註冊服務...

container.Register(Component.For<IWCFDataService>() 
            .AsWcfClient(DefaultClientModel.On(
             WcfEndpoint.ForContract<IWCFDataService>().FromConfiguration("Binding_IWCFDataService"))) 
            ); 

然後依賴將在類的構造函數注入

代碼來調用服務

public List<string> SomePRoperty 
     { 
      get 
      { 
       lock (_lockObjectSomePRoperty) 
       {      
         return _localvariable ?? (_localvariable = wcfClientResolvedFromDI.GetGroups().ToList()); 
       } 
      } 
      set { _localvariable = value; } 
     } 
+0

請提供您撥打該服務的地方的完整代碼。 –

+0

請參閱更新後的問題 – Abhash786

+1

如果沒有更多細節,很難弄清楚。在這裏簡單猜測:請求之間的時間間隔是多少。這是一個DuplexSession,可能有很多原因,但試圖查看它是否不是由於不活動導致頻道關閉造成的。然後,您可能會引入「聽覺」請求來保持頻道的正常運行並解決問題。其他原因可能是您嘗試在您的某個請求和通道故障中推送太多數據,則應該以較小的塊(多個請求)發送您的數據。 – Tobiasz

回答

0

的情況下,發生這種錯誤你傳遞一個對象無效的狀態。例如,GetGroups返回一個Group對象的集合,例如Group包含一個枚舉字段,比如說GroupType。然後,如果服務器端使用無效的枚舉值(例如(GroupType)36252)準備集合,而C#不會在此類轉換中拋出異常(請參閱Why does casting int to invalid enum value NOT throw exception?),則更嚴格的WCF將引發安全相關異常,與你的價值觀混爲一談。

相關問題