等待本地主机在 ASP.NET 核心中重新加载

Awaiting localhost to reload in ASP.NET Core

我有一个 ASP.NET 核心服务器,它使用 SignalR 在运行时通过 JavaScript 动态生成 HTML 页面。在我关闭我的应用程序后,在控制台中我可以看到 SignalR 已断开连接:

signalr.js:2404 Error: Connection disconnected with error 'Error: Websocket closed with status code: 1006 ()'.

问题是 - 我需要做什么来设置 SignalR 在断开连接后再次等待传入连接?这意味着当我的应用程序再次启动时,预加载的本地主机页面将自动连接并继续使用我的应用程序的新实例。

我在 JS 中初始化 SignalR 的方式:

var connection = new signalR.HubConnectionBuilder()
    .withUrl("/foo")
    .build();

然后

connection.on("state", function (state) {
    // some business logics there
});

connection.start().catch(function err() {
    return console.error(err.ToString());
});

据我所知,Signalr 客户端库提供自动重连功能。您可以使用 withAutomaticReconnect 来启用它。请注意:在没有任何参数的情况下,WithAutomaticReconnect 将客户端配置为在尝试每次重新连接尝试之前分别等待 0、2、10 和 30 秒。四次尝试失败后,它将停止尝试重新连接。

您也可以编写代码来手动重新连接。更详细的可以参考这个article.

白兰度的回答让我做了以下事情:

var connection = new signalR.HubConnectionBuilder()
    .withUrl("/foo")
    .build();

function start() {
    connection.start().catch(function () {
        setTimeout(function () {
            start();
            //there we can process any HTML changes like
            //disabling our loader etc. start() will fail
            //with exception if there's no server started
            //and it will try again in 5 seconds
        }, 5000);
    });
}

connection.onclose(e => {
    //process here any HTML changes like
    //showing the loader, etc, an then
    start();
})

connection.on("foo", function (state) {
    // some business logics there
});

start();

看起来 ASP.NET 和 signalR + vanilla javascript

之间的典型关系