Blazor 服务器显示“由于底层连接关闭而取消了调用”

New*_*v20 5 signalr blazor-server-side

我们有一个 Blazor 服务器端 Web 应用程序,其信号器托管在 IIS 上。我们为 Blazor.start() 添加了带有 reconnectionHandler 和 reconnectionOptions 的 EventListener。当打开网站作为以前的选项卡的一部分或在长时间睡眠后打开时,网站显示“发生错误。此应用程序可能不再响应,直到重新加载。 ”错误,并且控制台错误显示

Error: The list of component records is not valid.

Uncaught (in promise) Error: Invocation canceled due to the underlying connection being closed.
    at e.connectionClosed (blazor.server.js:1:27242)
    at e.connection.onclose (blazor.server.js:1:17377)
    at e.stopConnection (blazor.server.js:1:61423)
    at e.transport.onclose (blazor.server.js:1:59077)
    at e.close (blazor.server.js:1:47811)
    at e.stop (blazor.server.js:1:47400)
    at e.<anonymous> (blazor.server.js:1:52950)
    at blazor.server.js:1:49394
    at Object.next (blazor.server.js:1:49499)
    at a (blazor.server.js:1:48266)
Run Code Online (Sandbox Code Playgroud)

IIS 中没有负载平衡并且启用了 Websocket。我在 Blazor github 上检查了一下,一些解决方案建议的解决方案是在_Host.cshtml中添加一个无缓存元标记,例如

<meta http-equiv="Cache-Control" content="no-store" />
Run Code Online (Sandbox Code Playgroud)

即使添加了这个,我们仍然会遇到上述错误。我们是否遗漏了什么?任何帮助,将不胜感激。

正常使用该应用程序时不会出现该错误。信号器工作正常。

小智 1

我之前遇到过同样的问题,并在 github 上找到了详细说明相同问题的内容

正如史蒂夫所提到的,将以下内容放在body标签内_Host.chtml,而不是将其作为元标签。

@{
    Response.Headers["Cache-Control"] = "no-store";
}
Run Code Online (Sandbox Code Playgroud)