首页 新闻 会员 周边 捐助

在B/S项目中,怎么防止多个人短时间内同时提交同一个表单?

0
悬赏园豆:10 [已解决问题] 解决于 2014-05-15 09:32

目前是使用ASp.Net MVC  结合工作流开发的,同一个业务表单如果流程后面一个人没有操作,那么流程中前一个人是可以操作的,这样,2个人同时打开同一个表单审批时,1秒或者几秒之间的误差,可能出现数据错乱了,目前设计的是在流程里添加一个字段节点的版本,每次操作再比较最新的版本,如果比最新的低就不处理任何操作。但是在1秒以内同时点击,防止不了这个问题了!

谢谢大家了,看看有什么高见了啊!

骑蜗牛行天下的主页 骑蜗牛行天下 | 初学一级 | 园豆:32
提问于:2014-03-27 15:39
< >
分享
最佳答案
0

参考数据库里面读锁、写锁、排他锁的思路,当第一个人打开表单时,加上锁,后面打开的人可以查看不能修改

收获园豆:2
最长的路漫漫 | 菜鸟二级 |园豆:252 | 2014-03-27 17:15
其他回答(8)
0

✎﹏ℳ๓₯㎕ღ | 园豆:1499 (小虾三级) | 2014-03-27 15:41
0

上锁lock(object)

收获园豆:2
YoMe | 园豆:545 (小虾三级) | 2014-03-27 15:51
0

使用版本控制是可以的,甲乙两个人打开时,拿到的都是 V1 版本的表单,现在两人同时提交,系统同时收到两个修改请求,这时候你需要保证修改操作是串行的(依据具体的基础设施,其实现方式可能不同)。假设甲的修改操作先处理,那么甲先判断目前的版本号是否为 V1,如果是就修改,并将版本号修改为 V2,如果不是则放弃;系统接着处理乙的请求,流程同甲一样,由于版本已经被甲修改为 V2 了,所以乙修改不会成功。

收获园豆:2
Launcher | 园豆:45050 (高人七级) | 2014-03-27 15:58
0

加锁.操作完后修改表单状态.就不会重复提交了

吴瑞祥 | 园豆:29449 (高人七级) | 2014-03-27 16:32
0
收获园豆:2
happydaily | 园豆:260 (菜鸟二级) | 2014-03-27 17:00
0

lock就行,不要想太复杂了

Qlin | 园豆:2403 (老鸟四级) | 2014-03-27 17:04
0

一般上锁,或者用单例,同一时间只允许一个实例执行,然后就是你怎么规则这个工作流实例了。一般并发,都是用多线程单例来处理

收获园豆:2
amityat | 园豆:476 (菜鸟二级) | 2014-03-27 18:08
0

直接在C#处理提交处理的地方套上lock()代码块就行。

Sago | 园豆:48 (初学一级) | 2014-03-28 18:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册