У нас есть веб-сервис на сервере №1 и база данных на сервере №2. Веб-сервис использует область транзакции для создания распределенной транзакции. Все правильно.
И у нас есть еще одна база данных на сервере №3. У нас возникли проблемы с этим сервером, и мы переустановили операционную систему и программное обеспечение. Мы настроили MSDTC и попытались использовать веб-службу с сервера №1 для связи с базой данных на этом сервере. И теперь после первого оператора select в области транзакции мы получаем: The operation is not valid for the state of the transaction
. Это исключение встречается в каждом запросе веб-службы, если он использует область транзакции. Сервер №2 и Сервер №3 почти одинаковы. Разница может быть только в настройках. .NET framework 3.5 SP1 установлен и SQL Server SP3 на всех серверах.
Полная трассировка стека:
System.Transactions.TransactionState.EnlistPromotableSinglePhase (InternalTransaction ТХ, IPromotableSinglePhaseNotification promotableSinglePhaseNotification, сделка AtomicTransaction) в System.Transactions.Transaction.EnlistPromotableSinglePhase (IPromotableSinglePhaseNotification promotableSinglePhaseNotification) в System.Data.SqlClient.SqlInternalConnection.EnlistNonNull (Transaction т в System.Data.SqlClient.SqlInternalConnection .Enlist (транзакция t в System.Data.SqlClient.SqlInternalConnectionTds.Activate (транзакция транзакции) в System.Data.ProviderBase.DbConnectionInternal.ActivateConnection (транзакция транзакции) в System.Data.ProviderBase.DbConnectionPool.GetConnection собственная система. Data.ProviderBase.DbConnectionFactory.GetConnection (DbConnection owningConnection) в System.Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection outerConnection, DbConnectionFactory connectionFactory) в System.Data.SqlCl ient.SqlConnection.Open () в NHibernate.Connection.DriverConnectionProvider.GetConnection () в NHibernate.Impl.SessionFactoryImpl.OpenConnection ()
Я просмотрел это сообщение, но не нашел подходящего решения. Итак, какие настройки я должен проверить и что именно я должен сделать, чтобы это исправить?