情况: 使用TransactionScopeRequired OperationBehaviour的WCF服务。 WCF服务运行一个使用SqlBulkCopy向数据库插入许多行的进程。
在没有TransactionScopeRequired行为的情况下使用时,SqlBulkCopy会插入没有问题的记录,但是当此行为设置为true时,甚至不能插入少量记录。
更多信息 - WCF服务使用MSMQ端点。
答案 0 :(得分:0)
好的..我发布以上内容已经很晚了.. :)
进一步分析后(我很惭愧写这个......!)问题是由于我的服务实现了使用任务处理库 - 即我有多个进程使得DB调用包含在TransactionScope中 - 对于例子 -
- 第一个进程对DB执行操作。此操作会将事务附加到transactionscopes事务并导致数据库锁定。
- 然后生成第二个进程并尝试写入同一个表 - 它不能,因为事务不是原始事务范围的一部分。
解决方案 - 需要进行一些重新设计才能提供更智能的交易管理!