我写了一个实现 IDisconnect 接口的集线器。我不知道为什么 Disconnect 永远不会执行。我读到它可能不适用于 Visual Studio 调试,但我什至在生产服务器上对其进行了测试。
这是我的代码:
[HubName("myHub")]
public class MyHub: Hub, IDisconnect, IConnected
{
public Task Disconnect()
{
Log.SaveCurrentTime();
return Clients.leave(Context.ConnectionId, DateTime.Now.ToString());
}
public Task Connect()
{
return Clients.joined(Context.ConnectionId, DateTime.Now.ToString());
}
public Task Reconnect(IEnumerable<string> groups)
{
return Clients.rejoined(Context.ConnectionId, DateTime.Now.ToString());
}
public void Test()
{
Log.SaveCurrentTime();
}
}
Log.SaveCurrentTime() 仅用于测试目的,它保存当前日期时间做数据库记录。如果我使用 firebug 并在控制台中执行 hub.test(),一切正常,但是当我关闭浏览器时,当前时间不会保存到数据库,所以 Disconnect 没有被执行。
在这里我添加了 MyHub.js 的代码
var hub;
$(function () {
hub = $.connection.myHub;
$.connection.hub.start().done(function () {
alert('connected');
})
});