5

嗨,我遇到了一个问题,我的 signalR 客户在一个组中没有收到发送的信息。

我以两种方式尝试过,但都不起作用。

在加载的网页上,客户端将调用服务器以获取组名,然后调用集线器上的方法将用户加入该组。

脚本......

        var connectionOpen = false;
        var myHub;
        $(function () {
            myHub = $.connection.myHub;
            myHub.client.showMessage = alertMessage;
            $.connection.hub.start(function () {
                connectionOpen = true;
                joinGroup();
            });
        });

        function joinGroup() {
            $.ajax({
                url: 'Controller/GetGroupName,
                type: 'POST',
                success: function (group) {
                    if (connectionOpen == true)
                        tileHub.server.joinGroup(group);
                }
            });
        }

function alertMessage(string value){
alert(value);
}

控制器

[HttpPost]
public JsonResult GetGroupName()
{
    return Json("Foo");
}

我的集线器

public void JoinGroup(string groupName)
{
    Groups.Add(Context.ConnectionId, groupName);
}

我已经多次单步执行代码,我可以看到我连接正常并加入了该组,但是当我尝试发送回该组时没有任何反应

我从我的控制器使用这个发送到组

GlobalHost.ConnectionManager.GetHubContext<myHub>().Clients.Group("Foo").showMessage("Hello");

这是我尝试过的第二种方式,我也尝试过从集线器发送到群组,但仍然没有乐趣。

任何帮助将不胜感激...

更新 感谢 David Fowler 已修复此问题....

这是一个错误,因为我使用 HubName 属性给集线器一个不同的名称,然后使用 longPolling 传输给集线器一个不同的名称。删除该属性可以让 this 知道工作。还提供了修复程序,请参阅https://github.com/SignalR/SignalR/issues/1039

4

2 回答 2

3

一些事情:

  1. 确保您阅读了这篇文章的“重新加入群组”部分。http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx
  2. 您真的需要进行 ajax 调用才能从服务器中找出组名吗?不能直接在页面中渲染吗?
  3. 如果您将“Foo”硬编码为无处不在的组名,它会失败吗?
于 2012-11-23T22:37:18.287 回答
0

在dfowler的anwser中找到:https ://github.com/SignalR/SignalR/issues/1039 <在评论中没有看到。

解决方案是:从 Hub 中删除 HubName 属性。

于 2013-04-23T08:49:28.543 回答