【发布时间】:2012-12-04 02:01:22
【问题描述】:
编辑:David Fowler 要求提供完整代码以尝试复制问题。这是完整的代码
除了这里转载的代码,我还上传了完整的Visual Studio 2010解决方案到以下网址
http://www.sendspace.com/file/lfeurf(网址现已过期,不再有效)
请随时下载并测试。
这是我的发现
- 在 Hub 代码中仅添加一个组将使应用程序正常工作 很好,没有问题
- 添加 2 个组将停止信号器 工作或将只在一个方向工作。即:消息将是 从浏览器 1 传输到浏览器 2 但不会传输 从浏览器 2 到浏览器 1
原问题: 我在 MVC3 网站中使用 Signalr 1.0.0-rc1。我的客户有时需要属于多个组。这是我的集线器和客户端javascript中的代码
客户端 JavaScript 和 HTML
<script type="text/javascript">
//start signalr
var message = $.connection.messageHub;
// Declare a function on the message hub so the server can invoke it
message.client.send = function (message) {
alert(message);
}
// Start the connection and join groups
$.connection.hub.start();
//bind click event of button to invoke send function on server
$(document).ready(function () {
$("#target").click(function () {
message.server.send("Hello from signalr");
});
});
</script>
<button id="target">Click to send message to other clients</button>
服务器端集线器
public class MessageHub: Hub
{
public Task AddGroups()
{
//add 1st group
Groups.Add(Context.ConnectionId, "foo");
//add 2nd group
return Groups.Add(Context.ConnectionId, "foobar");
}
//this method will be called from the client
public void Send(string message)
{
Clients.OthersInGroup("foobar").send(message);
}
//automatically join groups when client first connects
public override Task OnConnected()
{
return AddGroups();
}
//rejoin groups if client disconnects and then reconnects
public override Task OnReconnected()
{
return AddGroups();
}
}
上面的代码应该在每个客户端第一次连接时添加两个组,但它不起作用。我使用调试器单步执行了 C# 代码,没有抛出任何错误。我也没有看到使用 Chrome 控制台的任何 javascript 错误,但客户端上没有调用 Send 函数。然后我将 AddGroups() 方法更改为仅添加一个组,如下所示
public Task AddGroups()
{
//dont add first group
//Groups.Add(Context.ConnectionId, "foo");
//add only second group
return Groups.Add(Context.ConnectionId, "foobar");
}
现在我的应用程序完美运行。如何添加第二组?看来我误解了加入多个组。谁能告诉我正确的方法吗?
【问题讨论】:
-
客户端代码是什么样的?
-
@dfowler - 添加客户端代码
-
发生的“确定”事件是什么,何时发生。我想重现问题,我想要您使用的 EXACT 代码
-
@dfowler - 大卫,我已经编辑了我的问题以包含完整的代码。此外,我还向sendspace.com/file/lfeurf 上传了一个演示问题的 VS2010 项目。您应该能够构建、运行和复制问题。
-
@dfowler - David,halter73 的修复对我来说非常有效。这是您可以在下一个版本中修复的错误,还是我以错误的方式使用 OnConnected 和 OnReconnected?
标签: c# asp.net-mvc-3 signalr signalr-hub