服务器端的SignalR IDisconnect不起作用

时间:2012-08-03 11:15:25

标签: asp.net signalr

我写了一个实现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(),一切正常,但是当我关闭浏览器时,当前时间不会保存到数据库,因此不会执行断开连接。

这里我添加了MyHub.js的代码

var hub;
$(function () { 
hub = $.connection.myHub;

$.connection.hub.start().done(function () {
    alert('connected');
})
});

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您的实施很好,因为您希望这应该有效。

你还等多久了?如果您只是关闭浏览器,则可能需要一段时间才能在网络级别断开连接,并注意到&#34;通过IIS传播到SignalR。