WCF并发和OptimisticConcurrencyException

时间:2013-07-07 13:04:22

标签: multithreading wcf entity-framework concurrency thread-safety

WCF服务配置为

InstanceContextMode = InstanceContextMode.PerCall
ConcurrencyMode = ConcurrencyMode.Multiple

我正在使用Entity Framework 3.1。只有负载测试,当我达到五个并发用户时,我得到了OptimisticConcurrencyException。

我将同步BLL.Update方法。或者使用ConcurrencyMode.Single。我无法使用ClientWins和StoreWins技术。

我将定义一个私有静态对象实例并锁定它以同步对该方法的访问。我如何防止其中一个线程被饿死。有没有办法使锁定公平?锁定静态引用是一个好主意吗?

1 个答案:

答案 0 :(得分:1)

您获得的异常是OptimisticConcurrencyException。由于您的事务使用的是Optimistic Concurrency,而且有2个用户正在更改相同的数据,因此您将收到此信息。

至少有3种方法可以解决它:

  • 设计级别:为什么不同的用户会更改相同的数据?
  • 数据库级别:使用事务范围不使用乐观并发进行数据库访问
  • WCF级别:对WCF服务使用单一并发模式

使用私有静态Object实例的想法与在单一模式下设置WCF服务具有相同的效果。