2

我意识到 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(){...};

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

4

1 回答 1

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. 在 messageReceived 的 .client 方法中,您不允许将值作为参数传递。除非您在函数中解析参数对象,否则您将无法获取消息值。
  3. 您的 message.Source 不正确

希望这可以帮助!

于 2012-11-29T18:05:13.133 回答