2

我想为我的 Blazor 服务器端应用程序使用部署槽,但它在交换期间停止为当前用户工作,他们必须刷新页面。

出于性能原因,我正在使用 Azure SignalR 服务,所以这有点道理,我想它是这样的:

在此处输入图像描述

连接保存在内存中,当我交换时,显然它已经消失了。至少没有 SignalR 服务。但是我的 SignalR 服务不应该保持 SignalR 连接(见红色)吗?我设置不正确吗?

我发现其他人也有类似的问题(不使用 Blazor),但我不确定这些是否适用于 Blazor,特别是因为我只想减少 1-2 分钟的停机时间以进行更新......

自动重新连接 SignalR 客户端在 Azure 插槽交换上断开连接

将连接存储在外部存储中。但是手动处理连接是荒谬的吗? https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/mapping-users-to-connections


更新: 见:https ://www.youtube.com/watch?v=Vvjdqq8MB44&t=12m10s

在此处输入图像描述

似乎有“网络流量”直接流向 Blazor 应用程序。我的猜测:交换后,“Web 流量”仍然流向前一个实例,而 SignalR 流量流向新交换的实例。这听起来像是个问题。

但再一次,我不知道“Web 流量”到底是什么,或者这是否是问题所在,以及 Azure 是否提供了解决问题的方法,所以仍然会得到明确的答案。

4

1 回答 1

1

我不认为你设置不正确。我考虑做类似的事情并得到相同的结果。

azure signalr 服务基本上充当代理,当您切换插槽时,azure signalr 服务器将失去与保持当前状态的 blazor 服务器集线器的连接。

我不认为它周围有任何东西,当您想要更新您的 blazor 服务器站点时,每个连接的客户端都将失去其连接,因为无法将客户端“状态”移动到新的插槽/站点。

好的是一旦所有旧连接断开,azure 能够切换新插槽,但我认为我们永远不会得到它,因为这是一个非常具体的 blazor 服务器要求。

于 2020-09-04T06:03:45.737 回答