1

我写了一个实现 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');
})
});
4

2 回答 2

1

SignalR 使用什么传输方法?每个浏览器可能会有所不同。

于 2012-08-03T21:46:48.070 回答
0

您的实施很好,您期望这应该有效。

你要等多久?如果您只是关闭浏览器,则网络级别的断开连接可能需要一些时间才能被 IIS“注意到”并传播到 SignalR。

于 2012-08-03T21:25:52.360 回答