2009-12-02 18 views
1

我有一個WCF服務器公開了一個接口,它有一個回調接口,它用來發送事件給客戶端。有沒有辦法通過WCF中的單個TCP連接進行TRUE雙向通信?

我寧願將回調界面上的所有方法都標記爲「OneWay」,因爲它會使錯誤跟蹤和日誌記錄更難。

客戶端使用WinForms編寫,所以直到服務器調用返回後,回調纔會處理。 (這是我想要的行爲)

我使用異步Eg進行所有回調。 BeginMyMethod(...),所以服務器不會被阻塞等待客戶端。

但是,如果將回調發送到與發送請求到服務器相同的客戶端,則TCP通道會自鎖,因爲它似乎無法將回復發送回客戶端,在客戶端通過同一個通道將回叫響應發送回服務器之前。

有沒有辦法做到true WCF中單個TCP連接上的雙向通信?

回答

0

你可以,如果做到這一點的服務器和客戶端的ACK兩者同時作爲服務器和客戶端(如果這是可以理解的)

它的工作是這樣的:

  • 當客戶端啓動時,它調用服務器並註冊自己
  • 服務器然後知道客戶端在哪裏,並可以通過客戶端公開的服務聯繫客戶端。

另一個更簡單的解決方案是不重複使用chanels,從而避免死鎖。

+0

我開始認爲最好只使用一個單獨的chanel來處理從服務器到客戶端的所有事件,而不是嘗試在用於向服務器發送命令的相同chanel上執行事件。 – 2009-12-04 08:25:50

+0

我接受了答案,因爲我不認爲有更好的選擇,那麼「不要重複使用chanels」 – 2009-12-14 12:36:58

相關問題