我们在服务器#1上有Web服务,服务器#2上有数据库。 Web服务使用事务范围来产生分布式事务。一切都是正确的。异常“操作对事务状态无效”使用TransactionScope
而我们在服务器#3上有另一个数据库。我们在这台服务器上遇到了一些问题,我们重新安装了操作系统和软件。我们配置了MSDTC,并尝试使用服务器#1的Web服务与此服务器上的数据库进行通信。 现在,在事务处理范围内的第一条选择语句之后,我们得到: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,交易原子事务)в System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification)в System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction t System.Data.SqlClient.SqlInte rnalConnection.Enlist(事务Tв System.Data.SqlClient.SqlInternalConnectionTds.Activate(事务 交易)в System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(事务 交易)в System.Data.ProviderBase.DbConnectionPool.GetConnection(的DbConnection owningObject)в System.Data.ProviderBase.DbConnectionFactory.GetConnection(的DbConnection owningConnection)в System.Data.ProviderBase.DbConnectionClosed.OpenConnection(的DbConnection outerConnection,DbConnectionFactory connectionFactory的)в System.Data.SqlClient.SqlConnection.Open ()Π NHibernate.Connection.DriverConnectionProvid er.GetConnection()в NHibernate.Impl.SessionFactoryImpl.OpenConnection()
我搜索了这个消息,但并没有找到任何合适的解决方案。 那么我应该检查哪些设置,以及我应该怎么做才能修复它?
什么操作系统?你究竟如何配置MSDTC? – 2010-04-12 15:46:24
你使用什么形式的TransactionScope()构造函数? – gprasant 2010-12-20 07:17:48
嗨Lanfear, 你解决了这个问题吗?我们在测试环境中遇到同样的错误。开发环境中的相同代码正常工作。 – 2011-02-18 10:48:09