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

  • 相关阅读:
    单例模式
    SRM147 DIV2 950
    SRM147 DIV2 600
    SRM147 DIV2 250
    SRM147 DIV1 1000
    Python 实现字符串反转的9种方法
    ubtuntu redis 集群部署/搭建(官方原始方案)
    Python2 ValueError: chr() arg not in range(256) 解决办法?
    python 字典操作中has_key() 和 in 那个使用更加pythonic?
    Python库 使用filetype精确判断文件类型
  • 原文地址:https://www.cnblogs.com/zjp8023/p/DTC.html
Copyright © 2011-2022 走看看