У нас есть веб-сервис на сервере №1 и база данных на сервере №2. Веб-служба использует область транзакций для создания распределенной транзакции. Все правильно.Исключение «Операция недействительна для состояния транзакции» с использованием TransactionScope
И у нас есть другая база данных на сервере №3. У нас были некоторые проблемы с этим сервером, и мы переустановили операционную систему и программное обеспечение. Мы настроили MSDTC и попытались использовать веб-службу с сервера №1 для связи с базой данных на этом сервере. И теперь после первого выбора в рамках транзакции мы получаем: The operation is not valid for the state of the transaction
. Это исключение относится к каждому запросу веб-службы, если оно использует область транзакций. Сервер №2 и сервер №3 почти похожи. Разница может быть только в настройках. .NET framework 3.5 SP1 и SQL Server SP3 на всех серверах.
Полный StackTrace:
System.Transactions.TransactionState.EnlistPromotableSinglePhase (InternalTransaction ТХ, IPromotableSinglePhaseNotification promotableSinglePhaseNotification, сделка AtomicTransaction) в System.Transactions.Transaction.EnlistPromotableSinglePhase (IPromotableSinglePhaseNotification promotableSinglePhaseNotification) в System.Data.SqlClient.SqlInternalConnection.EnlistNonNull (транзакция t в System.Data.SqlClient.SqlInte rnalConnection.Enlist (Transaction т в System.Data.SqlClient.SqlInternalConnectionTds.Activate (транзакция сделки) в System.Data.ProviderBase.DbConnectionInternal.ActivateConnection (Transaction сделки) в 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? –
Какую форму конструктора TransactionScope() вы используете? – gprasant
Hi Lanfear, Вы решили эту проблему? Мы получаем такую же ошибку в тестовой среде. Тот же код в среде Dev отлично работает. –