自动重新连接 Blazor 服务器端

bae*_*999 22 .net-core blazor

Blazor 服务器端(dotnet 核心 3.1)

我遇到了在客户方面显示的问题:

无法重新连接到服务器。重新加载页面以恢复功能。

每次我更新代码库或互联网时都会坏掉或类似的东西。

现在的目标是它应该在服务器再次返回时(或在某个时间间隔内)重新加载页面。

有什么可能可以帮助我吗?

小智 24

你可以试试这个代码:

<script src="_framework/blazor.server.js"></script>

<script>
   Blazor.defaultReconnectionHandler._reconnectCallback = function(d) {
        document.location.reload(); 
   }
</script>
Run Code Online (Sandbox Code Playgroud)

  • @d0rf47是的,我写了一篇关于它的文章:https://alldev.co.uk/reload-blazor-server-on-connection-down-in-net-6/ (5认同)
  • 不再是 .Net 6 中的解决方案,因为“_reconnectCallback”已被删除。 (3认同)
  • 将其添加为下面的解决方案 (3认同)

ary*_*yeh 14

对于 .NET 6 和 7,您可以使用:

<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
    Blazor.start().then(() => {
        Blazor.defaultReconnectionHandler._reconnectCallback = function (d) {
            document.location.reload();
        }
    });
</script>
Run Code Online (Sandbox Code Playgroud)

这将保持所有原始启动过程不变,并且仅在连接关闭时添加页面重新加载,而不需要突变观察器。


Dan*_*man 13

<script>
    // Wait until a 'reload' button appears
    new MutationObserver((mutations, observer) => {
        if (document.querySelector('#components-reconnect-modal h5 a')) {
            // Now every 10 seconds, see if the server appears to be back, and if so, reload
            async function attemptReload() {
                await fetch(''); // Check the server really is back
                location.reload();
            }
            observer.disconnect();
            attemptReload();
            setInterval(attemptReload, 10000);
        }
    }).observe(document.body, { childList: true, subtree: true });
</script>
Run Code Online (Sandbox Code Playgroud)

这将等到重新加载按钮出现,然后在实际重新加载之前等待服务器备份。

来自https://github.com/dotnet/aspnetcore/issues/10325#issuecomment-537979717

  • 我的服务器位于代理服务器后面,因此这会导致重新加载显示代理错误页面。我在 location.reload() 之前添加了“if (response.ok)”并修复了它 - 代理报告错误,并且代码不断重试,因为它不是 2xx 响应。 (4认同)