嗨,我遇到一个问题,即我在组中的signalR客户端没有收到发送的信息 .
我已经用两种方式试过了这两种方法,但都没有用 .
在加载的网页上,客户端将调用服务器以获取组名,然后在集线器上调用方法以加入该组中的用户 .
JavaScript的.....
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");
}
myHub
public void JoinGroup(string groupName)
{
Groups.Add(Context.ConnectionId, groupName);
}
我已经多次介绍了代码,我可以看到我正在连接确定并加入该组但是当我尝试发送回组时没有任何反应
我是从我的控制器发送到该组的
GlobalHost.ConnectionManager.GetHubContext<myHub>().Clients.Group("Foo").showMessage("Hello");
这是我尝试过的第二种方式,我也试过从集线器发送到群组但仍然没有快乐 .
任何帮助将不胜感激...
Updated 感谢David Fowler解决了这个问题....
这是一个错误,因为我使用HubName属性给Hub一个不同的名字,然后使用longPolling传输给signalR . 删除属性可以让它知道工作 . 还提供了一个修复程序,请参阅https://github.com/SignalR/SignalR/issues/1039
2 回答
一些事情:
请务必阅读本文中的"Rejoining Groups"部分 . http://weblogs.asp.net/davidfowler/archive/2012/11/11/microsoft-asp-net-signalr.aspx .
你真的需要进行ajax调用才能从服务器中找出组名吗?你不能直接在页面中呈现它吗?
如果您将"Foo"硬编码为组名,它会失败吗?
在dfowler的anwser中找到:https://github.com/SignalR/SignalR/issues/1039 <在评论中没有看到它 .
解决方案是:从Hub中删除HubName属性 .