• 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.如果可能,不要用分布式事务。

  • 相关阅读:
    php函数
    php循环语句(二)
    php循环语句(一)
    php魔术常量
    php超级全局变量
    php数组函数
    php数组
    php条件语句(二)
    php条件语句(一)
    shell 中的判断
  • 原文地址:https://www.cnblogs.com/zjp8023/p/DTC.html
Copyright © 2020-2023  润新知