控制多个用户Web应用程序gridview中的并发性

时间:2010-07-06 13:37:31

标签: .net multithreading gridview consistency

伙计们,我有一个大问题。

我正在运行一个后台应用程序,想象一下,我有一个包含gridview可编辑的表单。

  1. 100位用户转到页面
  2. 100用户将表单页面视为数据库
  3. 提供的数据
  4. 100用户编辑某些字段
  5. 如何控制此示例中的最终数据和一致性?

2 个答案:

答案 0 :(得分:0)

在您为此计划和实施技术解决方案之前,即。代码,您需要设计整体解决方案。

换句话说,考虑到您向100个不同的人分发了100张纸,每张纸上都有一份该网页的副本。那100个人在他们的纸上乱写笔记,然后以随机顺序将它交给你。

在这种情况下,您如何处理一致性?当你可以回答这个问题时,你可以实现它。

如果不了解您在该表格中的数据,实际上不可能给您提供具体的建议。

答案 1 :(得分:0)

取决于你真正想要的东西。你有要求吗?你在寻找建议吗?

一种可能的解决方案

如果您有一个在编辑完成时调用的显式保存操作,

  1. 用户导航到页面
  2. 用户修改表格
  3. 用户“保存”,
  4. 页面从数据存储中检索当前值(截至保存时)
  5. Page将当前值与修改后的值进行比较
  6. 突出显示任何冲突并请求用户“解决”冲突
  7. 转到步骤3.直到没有检测到冲突
  8. 另一种可能的解决方案

    如果你想避免步骤3.到步骤7.循环,你总是可以在一个事务中包装步骤4.到6.这意味着每次其他尝试保存阻止直到当前保存为止解决。这非常繁重,需要更多的工作,可能会有效地降低整体并发性。

    另一种可能的解决方案

    另一种可能的解决方案是使该过程不那么离散且更连续。提供实时数据馈送。

    1. 创建推送或允许轮询表数据的WindowsService / WCF服务,
    2. 页面轮询数据或异步接收来自远程服务的数据
    3. 页面用接收的数据修改用户的页面内容
    4. 不冲突的新值会暂时以一种颜色突出显示(表示无冲突变化),例如浅绿色
    5. 冲突的新值会以红色永久突出显示
    6. 如果您有保存过程,则在解决之前不能保存红色值。

      上次(建议)可能的解决方案

      如果您没有明确的保存操作,

      1. 用户点击单元格(有效地请求编辑单元格)
      2. 页面与Windows \ WCF服务通信,请求对该单元格进行“锁定”,
      3. 如果没有其他用户在该特定单元格上请求“锁定”,则将单元格锁定到该用户并返回true。如果另一个用户请求锁定该特定单元格,则尊重当前锁定并返回false。
      4. 如果远程服务返回false,则用例结束, 。如果远程服务返回true,则用户修改内容,当它们离开单元格或重新加载页面或其他任何内容时,远程服务将释放锁定。

        <强>结论

        好吧,有点挥手,但绰绰有余的咀嚼。考虑一下,有很多可能的解决方案。