将sql server用作backplane时SignalR不起作用



我尝试使用SQL Server和SignalR 设置以下配置

http://www.asp.net/signalr/overview/performance/scaleout-with-sql-server

一切似乎都设置正确,如果我评测SQL服务器,我可以看到SignalR对DB进行调用,但当我调用集线器向所有连接的客户端发送消息时,消息永远不会发送到连接的浏览器。

知道问题出在哪里吗?

谢谢@smnbss,你在问题中的评论救了我的命。为了让未来遇到同样问题的每个人都清楚地知道,这是错误的实现:我只得到过一次上下文,比如:

public class SyncService : ISyncService
{
    private IHubContext StatusChangeHub { get; set; }
    public GatewaySyncService()
    {
        StatusChangeHub = GlobalHost.ConnectionManager.GetHubContext<Hub>();
    } 
    public void SyncStatusChange(Status newStatus)
    {
        StatusChangeHub.Clients.All.onStatusChange(newStatus);      
    }
}

但不知何故,这只能在不使用背板的情况下工作。正确的实现:每次你想发送消息时,都需要获得上下文:

public class SyncService : ISyncService
{
    public void SyncStatusChange(Status newStatus)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<Hub>();
        context.Clients.All.onStatusChange(newStatus);      
    }
}

最新更新