Myk*_*hko 18 c# sql-server nhibernate msdtc
我们在服务器#1上有一个Web服务,在服务器#2上有一个数据库.Web服务使用事务范围来生成分布式事务.一切都是正确的.
我们在服务器#3上有另一个数据库.我们在服务器上遇到了一些问题,我们重新安装了操作系统和软件.我们配置了MSDTC并尝试使用来自服务器#1的Web服务与该服务器上的数据库进行通信.现在,在事务范围内的第一个select语句之后,我们得到:The operation is not valid for the state of the transaction.如果使用事务范围,则此异常属于每个Web服务请求.服务器#2和服务器#3几乎相似.差异只能在设置中.在所有服务器上安装.NET Framework 3.5 SP1和SQL Server SP3.
完整的堆栈跟踪:
System.Transactions.TransactionState.EnlistPromotableSinglePhase(InternalTransaction TX,IPromotableSinglePhaseNotification promotableSinglePhaseNotification,事务AtomicTransaction的)вSystem.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification)вSystem.Data.SqlClient.SqlInternalConnection.EnlistNonNull(事务TвSystem.Data.SqlClient.SqlInternalConnection .Enlist(事务t,System.Data.SqlClient.SqlInternalConnectionTds.Activate(事务事务),System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(事务事务),System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) - 系统. Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) - System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory) - System.Data.SqlClient.SqlConnection.Open()NHibernate.Connection.DriverConnectionProvider.GetConnection()вNHibernate.Impl.SessionFactoryImpl.OpenConnection()
我搜索了这条消息,但没有找到任何合适的解决方案.那么我应该检查哪些设置以及我应该做些什么来解决它?
Dan*_*don 30
Lanfear,我遇到了同样的错误信息,我找到了解决方案.您的情况可能有所不同,但我希望以下知识对您有用.
System.Transactions.Transaction.Current.TransactionInformation.Status 将返回当前事务的状态.
在每次使用该消息抛出异常的情况下The operation is not valid for the state of the transaction,当我逐步使用调试器时,我会看到在抛出异常之前状态为"Aborted".
在我的情况下,问题是由于在我想要仅中止一个事务时将两个事务嵌套在彼此内部而错误地中止这两个事务.显然,如果您使用具有两个嵌套事务的TransactionScope默认构造函数New TransactionScope(),则中止内部事务也会中止外部事务.解决方案是使用构造函数New TransactionScope(TransactionScopeOption.RequiresNew)  使用此构造函数,内部事务将是一个新事务,并且中止它不会中止外部事务.
这解决了我的问题.
启用分布式事务处理协调器为我解决了这个问题(这是在两台机器上完成的:具有Web服务的服务器和具有数据库的服务器.不确定Web服务是否需要它).
我按照此处描述的步骤启用DTC并向Windows防火墙添加例外:为Windows Server 2008启用网络DTC访问
| 归档时间: | 
 | 
| 查看次数: | 39356 次 | 
| 最近记录: |