我在Hub中没有触发OnConnected和OnDisconnected覆盖时遇到问题。
出于复制目的,我有一个非常简单的Hub:
public class OnlineHub : Hub
{
public void TestMethod()
{
var a = 1;
}
public override System.Threading.Tasks.Task OnConnected()
{
return Clients.All.connected(Context.ConnectionId, DateTime.Now.ToString());
}
public override System.Threading.Tasks.Task OnDisconnected()
{
return Clients.All.disconnected(Context.ConnectionId, DateTime.Now.ToString());
}
}
和aspx页面:
<script type="text/javascript">
$(function () {
$("#btn").click(function () {
$.connection.onlineHub.server.testMethod();
});
$.connection.onlineHub.server.connected = function (id, date) {
$("#results").append("connected: " + id + " : " + date + "</br>");
};
$.connection.onlineHub.server.disconnected = function (id, date) {
$("#results").append(("connected: " + id + " : " + date + "</br>");
};
$.connection.onlineHub.connection.start();
});
</script>
我正在使用jQuery 1.6.4和signalR 1.0.0-alpha2。客户端连接和断开连接的方法未被执行。如果我在OnConnected或OnDisconnected中放置断点,则断点不会命中。
当我的TestMethod调用ok并且我从signalR的协商呼叫中获得connectionId时,正在建立连接。
我确定我错过了一些简单的事情。
提前致谢。
答案 0 :(得分:11)
您的客户端处理程序应该如下所示:
$.connection.onlineHub.client.connected = function(){...}
答案 1 :(得分:6)
事实证明,在脚本上,您需要为集线器上引发的事件定义至少一个客户端回调。当预期OnConnected和OnDisconnected被调用时要小心。
答案 2 :(得分:2)
想出来。我在服务器对象而不是客户端上调用方法:
$.connection.onlineHub.server.connected = function (id, date) {
$("#results").append("connected: " + id + " : " + date + "</br>");
};
$.connection.onlineHub.server.disconnected = function (id, date) {
$("#results").append(("connected: " + id + " : " + date + "</br>");
};
应该是
$.connection.onlineHub.client.connected = function (id, date) {
$("#results").append("connected: " + id + " : " + date + "</br>");
};
$.connection.onlineHub.client.disconnected = function (id, date) {
$("#results").append(("connected: " + id + " : " + date + "</br>");
};
所以看起来如果signalR没有为OnDisconnected或OnConnected中的任务定义任何内容,那么它们就不会被触发。这是有道理的。