У нас есть веб-сервис на сервере # 1 и база данных на сервере # 2. Для создания распределенной транзакции веб-служба использует область транзакций. Все правильно.
И у нас есть другая база данных на сервере №3. У нас были некоторые проблемы с этим сервером, и мы переустановили операционную систему и программное обеспечение. Мы настроили MSDTC и попытались использовать веб-службу с сервера №1 для связи с базой данных на этом сервере.
И теперь после первого выбора в рамках транзакции мы получаем: 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 tx, IPromotableSinglePhaseNotification promotableSinglePhaseNotification, транзакционное атомное взаимодействие) в System.Transactions.Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification) в System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction t в System.Data.SqlClient.SqlInternalConnection.Enlist(Транзакция t в System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction транзакция) в 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 externalConnection, DbConnectionFactory connectionFactory) в System.Data.SqlClient.SqlConnection.Open() в NHibernate.Connection.DriverConnectionProvider.GetConnection() в NHibernate.Impl.SessionFactoryImpl.OpenConnection()
Я искал это сообщение, но не нашел подходящего решения. Итак, какие настройки следует проверить и что именно следует делать, чтобы исправить это?