Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 多用户web应用程序gridview中的并发控制_.net_Multithreading_Gridview_Consistency - Fatal编程技术网

.net 多用户web应用程序gridview中的并发控制

.net 多用户web应用程序gridview中的并发控制,.net,multithreading,gridview,consistency,.net,Multithreading,Gridview,Consistency,伙计们,我有个大问题 我正在运行一个backoffice应用程序,想象一下,我有一个包含gridview的表单 100个用户进入该页面 100个用户将表单页面视为数据库提供的数据 100个用户编辑一些字段 在本例中,如何控制最终数据和一致性 在规划和实施技术解决方案(即代码)之前,您需要设计总体解决方案 也就是说,你把100张纸交给100个不同的人,每个人都有一张网络表格的拷贝。那100个人在纸上乱写笔记,然后按随机顺序交给你 在这种情况下,您如何处理一致性?当你能回答这个问题时,你就能实现它

伙计们,我有个大问题

我正在运行一个backoffice应用程序,想象一下,我有一个包含gridview的表单

  • 100个用户进入该页面
  • 100个用户将表单页面视为数据库提供的数据
  • 100个用户编辑一些字段
  • 在本例中,如何控制最终数据和一致性

  • 在规划和实施技术解决方案(即代码)之前,您需要设计总体解决方案

    也就是说,你把100张纸交给100个不同的人,每个人都有一张网络表格的拷贝。那100个人在纸上乱写笔记,然后按随机顺序交给你

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


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

    在规划和实施技术解决方案(即代码)之前,您需要设计总体解决方案

    也就是说,你把100张纸交给100个不同的人,每个人都有一张网络表格的拷贝。那100个人在纸上乱写笔记,然后按随机顺序交给你

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


    如果不了解更多关于该表单中数据的信息,实际上就不可能给你具体的建议。

    取决于你真正想要什么。你有什么要求吗?你在寻求建议吗

    一种可能的解决方案

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

  • 用户导航到第页
  • 用户修改表格
  • 用户“保存”
  • 页面从数据存储中检索当前值(保存时)
  • 页面将当前值与修改后的值进行比较
  • 任何冲突都会突出显示,并请求用户“解决”冲突
  • 转到步骤3。直到没有检测到冲突为止
  • 另一种可能的解决方案

    如果你想避免第三步。到步骤7。循环,您始终可以结束步骤4。到6。在事务中,表示在解决当前保存之前,每隔一次尝试保存块。这相当繁重,需要更多的工作,可能会有效地降低总体并发性

    另一种可能的解决方案

    另一个可能的解决方案是使过程更少离散,更连续。提供实时数据源

  • 创建一个WindowsService/WCF服务,用于推送或允许轮询表数据
  • 页面轮询数据或从远程服务异步接收数据
  • 页面使用收到的数据修改用户的页面内容
  • 不冲突的新值将临时以一种颜色高亮显示(表示无冲突的更改),如浅绿色
  • 不存在冲突的新值将以红色永久亮显
  • 如果您有一个保存过程,则在解析之前不能保存红色值

    最后一个(建议的)可能的解决方案

    如果没有明确的保存操作

  • 用户单击单元格(有效地请求编辑单元格)
  • 页面与Windows\WCF服务通信,请求对该单元格进行“锁定”
  • 如果没有其他用户请求对该特定单元格进行“锁定”,则将该单元格锁定给该用户并返回true。如果另一个用户请求锁定该特定单元格,则尊重当前锁定并返回false
  • 若远程服务返回false,那个么用例结束,并且不能修改单元格。如果远程服务返回true,则用户修改内容,当内容离开单元格或重新加载页面或其他内容时,远程服务将释放锁

    结论


    好吧,挥手一点,但脂肪足够嚼了。想一想,有很多可能的解决办法。

    取决于你真正想要什么。你有什么要求吗?你在寻求建议吗

    一种可能的解决方案

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

  • 用户导航到第页
  • 用户修改表格
  • 用户“保存”
  • 页面从数据存储中检索当前值(保存时)
  • 页面将当前值与修改后的值进行比较
  • 任何冲突都会突出显示,并请求用户“解决”冲突
  • 转到步骤3。直到没有检测到冲突为止
  • 另一种可能的解决方案

    如果你想避免第三步。到步骤7。循环,您始终可以结束步骤4。到6。在事务中,表示在解决当前保存之前,每隔一次尝试保存块。这相当繁重,需要更多的工作,可能会有效地降低总体并发性

    另一种可能的解决方案

    另一个可能的解决方案是使过程更少离散,更连续。提供实时数据源

  • 创建一个WindowsService/WCF服务,用于推送或允许轮询表数据
  • 页面轮询数据或从远程服务异步接收数据
  • 页面使用收到的数据修改用户的页面内容
  • 不冲突的新值将临时以一种颜色高亮显示(表示无冲突的更改),如浅绿色
  • 不存在冲突的新值将以红色永久亮显
  • 如果您有一个保存过程,则在解析之前不能保存红色值

    最后一个(建议的)可能的解决方案

    如果没有明确的保存操作

  • 用户单击单元格(有效地请求编辑单元格)
  • 页面与Windows\WCF服务请求进行通信