情景:
我们有一个不使用事务流的客户端的wcf工作流。 工作流包含多个顺序TransactedReceiveScopes(使用基于内容的关联)。 TransactedReceiveScopes包含自定义数据库操作。
观察:
当我们针对第一次调用运行SQL事件探查器时,我们会在配置文件跟踪中看到所有自定义数据库调用和SaveInstance调用。
我们注意到,即使SendReply位于TransactedReceiveScope的最后,有时sendreply会在事务提交前10秒发生。
我们尝试将TimeToPersist和TimeToUnload更改为零,但这没有任何效果。 (跟踪显示SaveInstance立即发生,但提交似乎被延迟了。)
问题:
我们的观察是否正确?
交易在什么时候提交?这就像垃圾收集 - 即它在不忙的时候会提交一段时间吗?
有没有办法控制提交延迟,或者是从客户端使用事务流的唯一方法(anc然后它应该在客户端提交时提交,包括持久化)。
答案 0 :(得分:1)
TransactedReceiveScope在正文完成时提交事务,但是所有执行都是通过调度程序完成的,可能需要一段时间。它与垃圾收集无关,并且没有真正的方法可以影响它,以避免繁忙的机器和许多其他可能也在执行队列中的并行活动。