我们在服务器 #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, Transaction atomicTransaction) - System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification) - System.Data.SqlClient.SqlInternalConnection.EnlistNonSqlClient. .Enlist(Transaction t × System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction) × System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) × System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) × System. Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) × 系统。Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) - System.Data.SqlClient.SqlConnection.Open() - NHibernate.Connection.DriverConnectionProvider.GetConnection() - NHibernate.Impl.SessionFactoryImpl.OpenConnection()
我搜索了此消息,但没有找到任何合适的解决方案。那么我应该检查哪些设置以及我应该做些什么来修复它?