0

WCF 服务配置为

InstanceContextMode = InstanceContextMode.PerCall
ConcurrencyMode = ConcurrencyMode.Multiple

我正在使用实体框架 3.1。只有通过负载测试,当我达到五个并发用户时,我得到了 OptimisticConcurrencyException。

我要么同步 BLL.Update 方法。或者使用 ConcurrencyMode.Single。我不能使用 ClientWins 和 StoreWins 技术。

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

4

1 回答 1

1

您得到的异常是 OptimisticConcurrencyException。因为您的事务使用乐观并发并且 2 个用户正在更改相同的数据,所以您得到了这个。

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

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

您对私有静态对象实例的想法与将 WCF 服务设置为单一模式具有相同的效果。

于 2013-07-07T17:29:48.923 回答