gpt4 book ai didi

asp.net - 几分钟后 Signalr 停止执行回调

转载 作者:行者123 更新时间:2023-12-04 16:00:36 25 4
gpt4 key购买 nike

我在 aspx 页面上使用信号器 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();

集线器定义为:
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;
}
......
}

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

但是当我等几分钟
我看到
  • FooHub 被破坏
  • 在集线器中调用断开连接,

  • 但是在页面上没有新的连接
    Firebug 显示旧的仍在执行
    然后当我点击按钮时 -
  • FooFunction 被调用(我在 Firebug 中看到一个新连接)
  • FooHub 已创建
  • FooFunction在Hub中执行(Log中有一行)
  • 但 ShowInfo 没有执行

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

    更新(可能的答案):

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

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

    将传输更改为长轮询似乎可以解决此问题。

    最佳答案

    您提到切换到长轮询而不是使用永久帧,但没有说明如何做到这一点。您可以指定启动连接时要尝试的传输。

    connection.start({ transport: ['longPolling','webSockets'] });

    https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client更多选择。

    关于asp.net - 几分钟后 Signalr 停止执行回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316829/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com