场景:TransactedReceiveScope - 交易提交何时完成?
我们有一个wcf工作流程,其客户端不使用事务流。 工作流程包含几个连续的TransactedReceiveScopes(使用基于内容的关联)。 TransactedReceiveScopes包含自定义数据库操作。
观察:
当我们对运行在第一次调用SQL事件探查器中,我们看到所有的自定义调用数据库,并且在配置文件跟踪的SaveInstance电话。
我们已经注意到,即使SendReply在TransactedReceiveScope的最后,有时候sendreply在事务提交之前发生了10秒。
我们尝试将TimeToPersist和TimeToUnload更改为零,但这没有效果。 (跟踪显示SaveInstance立即发生,但是提交似乎被延迟)。
问题:
是我们的意见,是否正确?
交易在什么时候进行?这是否像垃圾回收 - 即它在一段时间后不忙时提交?
是否有任何方法来控制提交延迟,或者是唯一的方法来做到这一点使用来自客户端的事务流(然后它应该都提交时,客户端提交,包括坚持)。
谢谢莫里斯。我仍然觉得奇怪的是,你看到了profiler中的所有SQL调用,包括saveinstance,然后它返回给客户端,但是在它提交之前还有一段时间的延迟。我需要阅读调度程序,我没有看到太多的提及。唯一的解决方案似乎是使用客户端的TransactionFlow来控制事务的提交,即使客户端没有自己的工作来添加到事务中。 – jimasp
阅读此文的任何人的另一点是,如果您的客户端没有将事务处理流入工作流程,那么在大多数情况下,您只需要一个标准的receive/sendreply处理中间的transactioncope。 – jimasp