我有一个使用EF6的项目,它使用了一些旧的库(我不能修改这个库)。我的项目中的代码如下:
Using scope As New TransactionScope()
//Many DAOs calls that work just nice
//The call to the legacy library that fails
End Using
在这个库中,代码如下所示:
Using connection As new Sqlconnection("bla")
connection.Open() //THIS LINE FAILS INTERMITTENTLY
//more code
End Using
我已经调整了EF项目的隔离级别和事务范围,但是没有运气,问题仍然存在。在EF事务中手动打开连接是有效的吗?
我得到的异常为:
操作对于事务的状态无效
或者
与底层事务管理器的通信失败。 2014-10-11 13:49:16,736 ERROR[DataAccess.Services]: Timbrar: 该操作对于事务的状态无效。 内部异常:由于通信问题,MSDTC事务管理器无法从源事务管理器中拉取事务。可能的原因是:防火墙存在且没有为MSDTC进程设置例外,两台计算机无法通过其NetBIOS名称找到彼此,或者其中一个事务管理器未启用网络事务的支持。(HRESULT异常代码:0x8004D02B) 2014-10-11 13:49:16,767 ERROR[DataAccess.Services]: at System.Transactions.TransactionState.EnlistPromotableSinglePhase(InternalTransaction tx, IPromotableSinglePhaseNotification promotableSinglePhaseNotification, Transaction atomicTransaction) at System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification) at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx) at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource
1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at GuardarBitacora(String sCnn, Int64 CtePrincipalID, String NombreArchivos, String numUUID, String Proveedor, Int32 EstatusOper, String MensajeFolio, String MensajeErrorMetodo)
at CoreGenWS(String pstrXml, String usuario, String rfc, String password, Boolean sello, Boolean test)
at GenArchivoWS(String usuario, String rfc, String password, Byte[] xml, Boolean sello, Boolean test)
at Func(String usuario, String rfc, Int64 pCtePrincipalId, Boolean pftest, Byte[] xml, String pwdFac)
at Services.Func(RazonSocial razonSocial, Byte[] xmlValido)
at Services.(Boolean esBorrador, Int64 usuarioId, , encabezado, , List1 detalles, Func
1 , Func3 , Func
1 , Func`2 )我已经仔细检查了msdtc服务。它在两台服务器上都被正确地配置了,但奇怪的是,只有在系统负载较高时才会出现这种情况。