Поток проблем
- Клиент вызывает службу A
- Служба A запускает транзакцию и выполняет запросы и обновления базы данных.
- Служба A вызывает службу B с помощью wcf (net.tcp, TransactionsFlow = "true "actionProtocol =" OleTransactions ")
- Служба B [OperationBehavior (TransactionScopeRequired = true, TransactionAutoComplete = true)] выполняет запросы и обновления базы данных и возвращает их в A. ЗдесьHibernate 3 отказывается закрывать соединение из-за внешней транзакции.
- Служба A выполняет еще некоторые обновления и фиксирует распределенную транзакцию.
В SQL-сервере можно проверить, чтотранзакция, использованная для последнего оператора SQL в службе B, все еще открыта.
При попытке закрыть соединение в службе B hibernate выдает исключение, отказывающееся закрыть его, когда транзакция задействована.
Транзакция в конце концов закрывается по тайм-ауту.
Как NHibernВы собираетесь закрыть соединение?Как MSTDC сообщает службе B, что она завершена?
Мне кажется, что при использовании окружающих транзакций (TransactionScope + MSTDC) уровень доступа к данным не должен знать об этом и должен вести себя как без транзакции.,
РЕДАКТИРОВАТЬ: Обновлен до NHibernate 5.1.3, и то же поведение сохраняется.Агрессивный релиз все еще не поддерживается.