在Azure中的Blazor:组件记录列表无效

6
当我们将Blazor应用程序部署到Azure时,它会出现错误(从Chrome开发工具复制)五次中有四次如下所示:
[2019-12-16T11:12:55.214Z] Information: Normalizing '_blazor' to 'https://example.com/_blazor'.
[2019-12-16T11:12:55.470Z] Information: WebSocket connected to wss://example-web-signalr-service.service.signalr.net/client/?hub=componenthub&asrs.op=%2F_blazor&negotiateVersion=1&asrs_request_id=...&id=...&access_token=...
[2019-12-16T11:12:55.548Z] Error: The list of component records is not valid.
    e.log @ blazor.server.js:15
    C @ blazor.server.js:8
    (anonymous) @ blazor.server.js:8
    (anonymous) @ blazor.server.js:1
    e.invokeClientMethod @ blazor.server.js:1
    e.processIncomingData @ blazor.server.js:1
    connection.onreceive @ blazor.server.js:1
    i.onmessage @ blazor.server.js:1
[2019-12-16T11:12:55.552Z] Information: Connection disconnected.
Uncaught (in promise) Error: Invocation canceled due to the underlying connection being closed.
    at e.connectionClosed (blazor.server.js:1)
    at e.connection.onclose (blazor.server.js:1)
    at e.stopConnection (blazor.server.js:1)
    at e.transport.onclose (blazor.server.js:1)
    at e.close (blazor.server.js:1)
    at e.stop (blazor.server.js:1)
    at e.<anonymous> (blazor.server.js:1)
    at blazor.server.js:1
    at Object.next (blazor.server.js:1)
    at a (blazor.server.js:1)

我们无法理解这个问题。Blazor失败的原因可能是什么?为什么它不会在我们本地的开发机器上失败?在谷歌上找不到任何关于此的信息。如果需要更多信息,请告诉我。我不确定哪些代码片段可能是有用的信息。

我会移除SignalR服务,直接在Azure中启用Web Sockets。我以这种方式做过,完全没有遇到任何问题。 - Michael Washington
我已经启用了Web Sockets和ARR,但仍然收到相同的错误消息?在我的开发机器上本地运行正常,一旦部署到Azure,就会出现此错误。 - YodasMyDad
1个回答

14

试试这个:

services.AddSignalR().AddAzureSignalR(options =>
{
    options.ServerStickyMode = Microsoft.Azure.SignalR.ServerStickyMode.Required;
});

完美。当使用SignalR服务时的典型连接流程是,客户端首先与应用程序服务器进行协商以获取SignalR服务的URL,然后服务将客户端路由到应用程序服务器。当您拥有多个应用程序服务器时,不能保证两个服务器(执行协商和获得中枢调用的服务器)将是同一个服务器。 该设置是为了使两个服务器成为同一个服务器,以便它们可以在协商和中枢调用之间共享某些状态。 阅读更多:https://github.com/Azure/azure-signalr/blob/dev/docs/use-signalr-service.md#serverstickymode - Kamran
1
谢谢,我最终在我的应用程序中使用了非常相似的解决方案。在我的应用程序中,我将这段代码包装在 if (!HostingEnvironment.IsDevelopment()) { ... } 中,因为我只在生产/暂存环境中使用 Azure SignalR 服务,而不是在开发模式下使用。 - Eilon
我正在使用IIS,这个选项也可用吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接