2012-12-03 75 views
0

在客戶端服務器WCF雙工場景中,建議讓服務器知道客戶端發生錯誤的方式是什麼?假設服務器通知其中一個客戶端它需要執行某個操作,並且客戶端正在拋出一個異常。WCF雙工場景 - 通知服務器的客戶端錯誤

在回調接口,我有這樣的事情

[OperationContract(IsOneWay = true)] 
void Work(...); 

什麼是最好的辦法:

  1. 實現一個NotifyServer(int clientId, string message)消息客戶端可以調用,讓用戶知道所請求的操作失敗,
  2. 如果我在操作合同上設置了IsOneWay = false,我是否需要在BackgroundWorker線程上調用每個客戶端以保持UI的響應?
  3. 在服務器上實現異步操作?這將如何工作?我可以在客戶端上生成異步操作,我必須使用相同的模式(BeginWork,EndWork)作爲客戶端回調方法嗎?

想不到別的,因爲在客戶端拋出FaultExceptionIsOneWay = true不起作用。

有什麼建議嗎?

預先感謝您!

回答

0

廣告1.這是一種做法......如果Work()可能需要不可預測的時間量,並且您不希望服務器線程掛在該呼叫上,建議使用此方法。

Ad 2.您應該始終在後臺工作者中執行WCF操作,並且永遠不要在UI線程內執行操作。如果設置了IsOneWay = False,那麼顯然Work()方法將在服務器上阻塞,直到它在遠程客戶端並返回結果。但是,即使您設置了isOneWay = true,該方法仍會阻塞低級WCF通信。如果WCF連接被丟棄,則可能需要很長時間才能得到通知。

廣告3. 該模式取決於你。 示例:MSDN: OperationContractAttribute.AsyncPattern Property

沒有最佳解決方案。這一切都取決於你的設置(類,線程等)。您編碼的WCF層應該簡單易用 - 這是主要的指導方針。