Transactionscope超时不到1分钟

时间:2013-11-19 00:29:28

标签: c# asp.net

我遇到这种情况:

try
{
    if (log.QuantidadeTentativa <= 3)
    {
       using (TransactionScope scope = new TransactionScope())
        {
            try
            {
                logIntegracaoRepository.LimpaMovimentoCancela(log.DataInicio, log.DataFim, log.ShoppingId.Value);
                ObterDadosDoServicoNeposFull(log, shopping);
                movimentoCancelaRepository.GravaMovimentoCancela(log.Id);
                scope.Complete();
            }
            catch (Exception ex)
            {
                scope.Dispose();
                throw ex;
            }
        }
    }
}
catch (Exception ex)
{
    throw ex;
}

这里我在transactioncope中有3个步骤。第一个是通过一个过程删除数据库中的行。

第二步是从服务中获取xml数据并将它们插入到几个中间表中,

最后一步是将这些数据从中间表移动到其他数据作为确定数据。

如果我不使用transactionscope,那些步骤可以正常工作。如果我使用它,第二步抛出超时异常。

我几乎一切皆有可能,没有成功。我无法更改machine.config,因为我在客户端服务器上没有这个permition。

我使用了以下这一行也没有成功。在这一行中,我设置了超时时间。最多使用2小时,但错误仍然存​​在。

int timeToScope = Convert.ToInt32(ConfigurationManager.AppSettings["ScopeTransactionTimeInSeconds"]);
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(timeToScope)))

唯一的问题是这个交易镜......我真的不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

您的超时可能无法连接到MSDTC。除非您使用相同的数据库连接,否则第二个db往返会将其升级为分布式事务。

分布式事务由MSDTC在数据库服务器上的本地系统上进行管理。如果数据库服务器与运行代码的服务器位于不同的域中,则无法进行身份验证。如果发生了这种情况,您可以在Windows事件日志中看到这一点。

同样,如果MSDTC没有在两台机器上运行,或者防火墙阻止了COM RPC调用等,它也会失败。

如果你想完全避免使用MSDTC,请保持数据库连接,并在transactioncope中为所有数据库操作重用它。

答案 1 :(得分:0)

确保您不使用分布式事务。当您有多个事务数据源(如不同的数据库或同一数据库)时,会发生分布式事务,但您使用不同的连接字符串来访问它们。

如果必须使用分布式事务,请确保启用它们。

分发事务由Windows服务中的“分布式事务处理协调器”服务运行。默认情况下,它已停止并具有手动启动模式。