首页 > 解决方案 > 如何处理并发用户对 Blazor webassembly 中的数据进行更改

问题描述

我目前对 Blazor webassembly 的理解是用户加载应用程序,对 Web API 进行一次初始调用并检索要显示的数据集。然后,用户可以在本地与数据交互,并且仅在用户插入、更新或删除项目时才调用 API。除了初始调用之外,不需要进一步的“获取”调用,因为数据的状态是在本地加载的。

如果期望多个并发用户与同一个数据集进行交互怎么办?传统上,在标准 Web 应用程序中,每当重新加载页面并从后端存储检索新的数据集时,对数据集的外部更改将很快可见。在某些情况下,如果希望用户长时间坐在页面上而不重新加载,则可能需要引入轮询。

我不确定在 Blazor 世界中处理此类用例的最佳实践是什么。轮询 Web API 是一种公认​​的解决方案吗?我应该期待 SignalR 通知客户数据集中的变化吗?我忽略了任何内置机制?

标签: c#blazor

解决方案


我认为 Blazor 在这方面与其他框架没有什么不同。如果您在浏览器上编辑对象,您有两种选择:

  1. 让每个用户编辑和保存,无需用户之间的任何协调。对象将保持上次用户保存它的状态。

  2. 实现某种对象锁定。我不知道 .NET Core 是否提供这种东西,但应该不难管理自己。因此,在这种情况下,如果用户签出了一个对象,则在返回签出之前不允许其他用户对其进行编辑。但我怀疑这种策略是否适用于通用应用程序。对于企业来说,这可能会奏效。问题是有人在返回对象之前关闭了他/她的浏览器。在您实施某种超时之前,其他用户将无法访问该对象。更新:EF Core 具有并发检测功能,您可以将其配置为引发 DbUpdateConcurrencyException。然后,您可以使用它来覆盖另一个用户所做的更改,或者为用户提供重新加载新数据的选项等。

关于刷新数据的问题,一般的做法似乎是在组件初始化时获取数据,进行更改然后将其保存回来。您很少会想要在两者之间重新获取,尽管您可以随心所欲。但这也会一次又一次地刷新用户界面。


推荐阅读