几分钟后,信号器停止进行回调

Nen*_*nad 6 asp.net signalr

我在aspx-Page上使用signalr 0.4,

var hub = $.connection.FooHub;

hub.disconnected(function () {                
            log("Server has disconnected");
        });

hub.ShowInfo = function (Info) { .... }

$("#Button1").click(function () {
            hub.FooFunction('foo');
        });

$.connection.hub.start();
Run Code Online (Sandbox Code Playgroud)

集线器定义为:

public class FooHub : Hub, IDisconnect
{    
    ~FooHub()
    {
        log.Debug("FooHub Destroy");
    }
    public FooHub()
    {
        log.Debug("FooHub Startup");
    }    
    public bool FooFunction(string stuff)
    {
        log.Debug("Hub FooFunction");
        Clients.ShowInfo(someInfo);
        return true;
    }
    public Task Disconnect()
    {
        // Query the database to find the user by it's client id etc. etc.
        MyController.Disconnect(Context.ConnectionId);
        log.Debug("Hub Disconnnect " + Context.ConnectionId);
        return null;
    }
   ......
}
Run Code Online (Sandbox Code Playgroud)

当我打开页面并立即点击Button1时,
它会调用Hub,而Hub又调用页面上的ShowInfo函数.
使用Firebug,我可以看到信号器正在使用长轮询进行通信.所以一切都按预期工作.

但是,当我等待几分钟后,
我看到了

  • FooHub被摧毁了
  • 在Hub中调用断开连接,

然而在页面上没有新的连接
Firebug显示旧的仍然被执行
,当我然后点击按钮 -

  • 调用FooFunction(我在firebug中看到一个新连接)
  • FooHub已创建
  • FooFunction在Hub中执行(Log中有一行)
  • 但是没有执行ShowInfo

这是SignalR中的错误还是我必须做其他事情才能获得ShowInfo调用?

更新(可能的答案):

它使用Forever-Frame而不是长轮询.

此外,问题似乎主要发生在使用移动互联网(usb-stick)和Firefox时.

将传输更改为long-Polling似乎可以解决此问题.

Pav*_*ula 0

你看过这个https://github.com/SignalR/SignalR/wiki/Configuring-SignalR 试试这个看看。对我来说,根据你的代码,一切似乎都很好。您也可以在 Chrome 中进行相同的测试,看看会发生什么。