c# - 如何使用 WCF NetHttpBinding (WebSockets) 通过服务器向所有客户端广播(推送)一个客户端发送的消息?

标签 c# wcf windows-8 websocket

在 .NET 4.5 中,引入了一个新的 WCF 绑定(bind)——NetHttpBinding——它使用 WebSocket 协议(protocol)作为其底层传输。这意味着这可以实现来自服务器的真正推送。现在,我已经能够使用这样的回调合约进行某种推送:

[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() 时向所有客户端广播消息。有没有办法访问所有客户端的回调 channel ?或者我应该记录所有客户端的回调 channel 以供以后在其他方法中使用(例如 Connect())?也许我以错误的方式解决了这个问题?

任何帮助将不胜感激。谢谢

最佳答案

每个客户端的回调 channel 都是唯一的,因此无法访问所有客户端的回调 channel 。

相反,您应该将每个客户端的回调 channel 保存在一个列表中,或者最好保存在一个字典中,这样您就可以针对特定的客户端。

然后,当您想向所有客户端广播消息时,只需浏览列表即可。

关于c# - 如何使用 WCF NetHttpBinding (WebSockets) 通过服务器向所有客户端广播(推送)一个客户端发送的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13310978/

相关文章:

c# - 如何重置 Vector3 位置?

c# - Firebird EXECUTE BLOCK 从 c# 和 Flamerobin 中抛出错误 104

c# - 如何从客户端记录完整的原始 WCF 客户端请求?

F# WinRT 的优点

c# - 适配器 c# 中的 "Like"查询

c# - SQL Server 2008 的 Java 替代方案 - 紧凑

.net - 区分来自客户端和其他服务的请求

c# - WCF 请求限制

html - 如何在 win8 html 和 javascript metro 应用程序中让 -ms-grid 自适应宽度布局?

xaml - Windows 8 Metro 控件的可能 VisualStates 记录在哪里?