我写了一个实现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');
})
});
答案 0 :(得分:1)
SignalR使用什么传输方法?每个浏览器可能有所不同。
答案 1 :(得分:0)
您的实施很好,因为您希望这应该有效。
你还等多久了?如果您只是关闭浏览器,则可能需要一段时间才能在网络级别断开连接,并注意到&#34;通过IIS传播到SignalR。