asp.net - 并发 ASP.NET session 最佳实践

标签 asp.net session concurrency

用户 A 登录工单管理系统编辑“SomePage.aspx”上的内容

用户 B 登录 30 秒后在“SomePage.aspx”上编辑同一张票

通知每个用户其他人正在修改相同内容的一些最佳实践(在 3 层架构中)是什么?

最佳答案

在像 HTTP 这样的请求/响应系统中,用户当前正在做什么的概念并不多。您可以通知他们其他人在“最后两分钟内”打开了票证进行编辑(或者甚至在这种情况下阻止他们打开它),但用户 A 可以编辑半小时 - 除非您也禁止这样做。您可以记下这样一个事实,即您认为用户 A 已经有效地“获得”了要编辑的项目,但是对于网络应用程序,没有什么可以阻止用户离开计算机并且永远不会保存/取消。

在考虑技术解决方案之前,我建议先考虑技术限制(基本上是 Web 的异步和请求/响应性质)并制定所需的行为。一些常见的行为是:

  • 第一个编辑获胜(告诉第二个编辑他们的更改已被拒绝,基本上)
  • 第二个编辑获胜(覆盖第一个编辑 - 现在告诉第一个编辑为时已晚)
  • 合并(可能非常困难和/或不可能,取决于内容)。这可以是自动的或手动的(在第二个编辑器的部分)。
  • 在您认为第一人可能正在编辑时阻止第二个人进行编辑(由于第一段中提到的问题,这很少适用于网络应用程序)
  • 关于asp.net - 并发 ASP.NET session 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/232748/

    相关文章:

    ASP.NET:如何从处理程序访问 session ?

    c# - 通过 await 关键字返回任务和不使用 await 关键字返回的主要区别是什么?

    c# - 如何使nodejs代码在asp.net core(带有JavascriptService)应用程序中调用csharp代码?

    python - GAE Webapp2 - 销毁 session 不起作用

    c# - 使用分布式 Web 服务查询多个数据库

    java - 对象内部的属性在 session 中消失,但 Bean 本身不会消失

    php - session 固定 VS XSRF/CSRF

    sql - 如何处理数据库中的并发更新?

    python - 使用 ProcessPoolExecutor 在执行器中运行 AsyncIO

    java - volatile Java 重新排序