ASP.NET SignalR不向客户端发送消息

时间:2012-11-29 16:13:45

标签: signalr signalr-hub signalr.client

我意识到SignalR和ASP.NET SignalR之间存在重大变化,我改变了我的代码以适应这种情况。但出于某种原因,我无法找到正确的变化。

我遇到的问题是服务器没有向客户端发送消息。

旧SignalR代码:

服务器

var context = GlobalHost.ConnectionManager.GetHubContext<Dashboard>();
var subscribers = context.Clients;

if (!string.IsNullOrWhiteSpace(message.Source))
{
    var subscriber = subscribers[message.Source];

    subscriber.messageReceived(message);
}

客户端

$.connection.dashboard.messageReceived = function(){...};

新代码(ASP.NET SignalR):

服务器

var context = GlobalHost.ConnectionManager.GetHubContext<Dashboard>();
var subscribers = context.Clients;

if (!string.IsNullOrWhiteSpace(message.Source))
{
    var subscriber = subscribers.Group(message.Source);             
    subscriber.messageReceived(message);
}

客户端

$.connection.dashboard.client.messageReceived = function(){...};

有人可以帮我弄清楚这里出了什么问题吗?

1 个答案:

答案 0 :(得分:0)

我能够让你的代码逻辑工作。这就是我构建逻辑的原因:

服务器:

public class Status : Hub
{
    public override Task OnConnected()
    {
        Groups.Add(Context.ConnectionId, "foo");
        return base.OnConnected();
    }

    public void foo()
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<Status>();
        var subscribers = context.Clients;
        var subscriber = subscribers.Group("foo");
        subscriber.messageReceived("ello");
    }
}

客户端:

var status = $.connection.status;

status.client.messageReceived = function (val) {
    alert(val);
}

$.connection.hub.start().done(function() {
    status.server.foo();
});

我对你的实施无效的唯一想法是:

  1. 您没有将连接ID​​添加到您尝试向其广播的组中(请参阅服务器上的OnConnected功能)。
  2. 在message.Received的.client方法中,您不允许将值作为参数传递。除非您正在解析函数中的arguments对象,否则您将无法获取消息值。
  3. 您的留言。来源不正确
  4. 希望这有帮助!