2012-11-09 57 views
3

在.NET 4.5中引入了一個新的WCF綁定 - NetHttpBinding,它使用WebSocket協議作爲底層傳輸。這意味着這可以實現從服務器的真正推送。現在,我已經能夠使用像這樣的回調合同做出某種推:如何使用WCF NetHttpBinding(WebSockets)將一個客戶端發送的消息廣播(推送)到所有客戶端?

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] 
public class WebSocketSampleService : IDuplexContract 
{ 
    public string SayHelloDuplex() 
    { 
     //push to the current caller 
     OperationContext.Current. 
      GetCallbackChannel<IDuplexCallbackContract>(). 
      SayingHello("Hello from WebSockets"); 

     //answer the current caller in the regular http way 
     return "Hello"; 
    } 
} 
[ServiceContract(CallbackContract=typeof(IDuplexCallbackContract))] 
public interface IDuplexContract 
{ 
    [OperationContract] 
    string SayHelloDuplex(string name); 
} 
[ServiceContract] 
public interface IDuplexCallbackContract 
{ 
    [OperationContract] 
    void SayingHello(string message); 
} 

我想這樣做雖然,是指一個客戶端調用該方法,以廣播消息到所有客戶端SayHelloDuplex() 。有沒有辦法訪問所有客戶端的回調通道?或者我應該記錄所有客戶的回撥通道,以便以後使用其他方法(例如Connect())?也許我正在以錯誤的方式解決這個問題?

任何幫助將不勝感激。謝謝

+2

不是您的具體問題的答案,但這聽起來像是SignalR可以讓您的生活更輕鬆的場景。里程將有所不同... –

+0

@ JeffBrand-MSFT謝謝。我正在學院完成我的主要學期項目。我分析了在.NET中實現實時通信的方法。我已經寫了關於SignalR以及它如何讓我的生活更輕鬆。這也是我想分析的一個選擇。 – reederz

回答

2

回撥通道每個客戶端都是唯一的,所以無法訪問所有客戶端的回撥通道。

相反,您應該將每個客戶端的回調通道保存在一個列表中,或者在字典中保存更好,以便您可以鎖定特定的客戶端。

然後,當您想要將消息廣播到所有客戶端時,只需查看列表即可。

相關問題