zoukankan      html  css  js  c++  java
  • The operation is not valid for the state of the transaction.

    DTC TIMEOUT
    The operation is not valid for the state of the transaction.


    解决方法:TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, new TimeSpane(0, 5, 0)) //五分鐘。預設是一分鐘。

    1.没事不要用TransactionScope,这玩意并不像文档里说的那样,只有"必要"的情况下,才会
    升级本地事务到分布式事务.实际情况是:在Scope中,只要你打开两条连接,就算是这俩连接
    都是相同的数据库,也会发生分布式事务.据说,同样的操作,分布式事务要慢上10倍.

    2.TransactionScope被Abort时(比如Timeout),不会释放它持有的连接.这是一个bug,内部有
    一个hotfix出来,但是还没有发布。

    3.在比较大的负载情况下(不大的情况也有,但是少.不能确认是否是负载的问题.),可能会存
    在System.Transactions.CommittableTransaction.Commit被永远阻塞的情况.后果是:你的
    方法永远不会返回,TransactionScope拿到的连接永远不会返回给连接池,从数据库端看这些
    连接状态都正常,从你的应用程序中看,它们都是活动的,所以,你永远都不可能再使用它们,
    它们成了僵尸...这是一个已经确认的bug,但是没有hotfix.

    4.如果不得不使用TransactionScope,先研究研究kb916002.

    5.如果可能,不要用分布式事务。

  • 相关阅读:
    竞赛备考建议
    谷山丰的一生
    从首个IMO季军谈起 作者 : 付云皓
    孔庆东:单刀赴高考
    LaTeX 技巧 802:国内期刊 CCT 模板编译经验
    数学书籍推荐
    翻译
    printf中用法详解
    黎活明给程序员的忠告【转】
    log4j2配置文件log4j2.xml详解(转载)
  • 原文地址:https://www.cnblogs.com/zjp8023/p/DTC.html
Copyright © 2011-2022 走看看