簡體   English   中英

WCF雙工回調,如何向所有客戶端發送消息?

[英]WCF duplex callbacks, how do I send a message to all clients?

我正在使用WCF與雙工netTcpBinding ,我想向當前連接到我的服務的所有用戶發送一條消息。 我以為我可以創建一個回調合約,它會向所有客戶發送一條消息,但似乎我錯了,並且沒有一個服務器/服務,每個客戶端都有自己的服務?

我的服務名稱為'Server'。 以下是我從客戶端訪問服務器的方法 -

ServerClient client = new ServerClient();
string result = client.SendMessage(messageTextBox.Text);
client.Close();

我認為'Server'是一個單個對象來處理我的客戶端的所有調用,但后來我在Server構造函數中啟動了一個線程,我發現多個線程都啟動了,因為每次客戶端調用Server時,都會有一個新的服務器對象已創建。

所以似乎每個客戶端都有自己的服務/服務器。

  1. 考慮到這一點,我如何從服務器向我的所有客戶發送消息?
  2. 我認為從客戶端訪問服務器的標准做法是獲取代理對象,調用服務函數,然后像上面的代碼中那樣關閉代理對象...但如果我關閉代理對象不是它的意思我已關閉客戶端和服務器之間的連接,現在服務器將無法對客戶端進行雙工回調?

1)如果您希望所有客戶端共享同一台服務器,您需要使您的服務成為單身人士。 將此屬性添加到實現服務的類(而不是接口):

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 

也就是說,我懷疑你真正想要的是List<ServerClient>的同步,靜態(線程共享)實例。 然后,您將迭代它以向每個客戶端發送消息。 使用該設計,您不需要單一服務器(只需在列表周圍提供一些良好的線程安全性)。

2)如果客戶端關閉其服務器代理,服務器將無法向其發送任何消息。 您需要保持代理打開並將其存儲在客戶端的某個位置。 這種設計當然會顯着限制可擴展性。

默認情況下,每個客戶端都將獲得自己的服務實例。 但是,您可以使您的服務成為單一服務(這將處理來自所有客戶端的請求)。

您可能還想瀏覽此實例管理文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM