Распределенная транзакция с WCF и NHibernate 3 (также 5) сохраняет открытую транзакцию - PullRequest
0 голосов
/ 10 октября 2018

Поток проблем

  • Клиент вызывает службу 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, и то же поведение сохраняется.Агрессивный релиз все еще не поддерживается.

...