NHibernate Session (Session Per Request) Получает закрытие, когда выдается исключение EndPointNotFoundException Исключение вызова WCF. Как это исправить? - PullRequest
1 голос
/ 18 октября 2011

Мы используем Spring.NET для внедрения зависимостей и NHibernate в качестве ORM. Мы используем Session Per Request Model, и сессия создается с использованием Spring.NET. На одной из страниц есть вызов веб-службы. Когда вызов веб-службы вызывает исключение EndPointNotFoundException, сеанс NH закрывается, и мы получаем «Исключение отложенной инициализации:» не удалось лениво инициализировать коллекцию ролей: ни один сеанс или сеанс не был закрыт (у нас есть объекты Person, которые загружаются в загрузка страницы, но объекты Person имеют набор лениво загруженных коллекций, таких как адреса и т. д., возникает ошибка при обращении к одной из лениво загруженных коллекций). Если исключение не выдается, все работает правильно. Есть ли быстрое решение?

1 Ответ

0 голосов
/ 21 октября 2011

Требуется больше информации, но я попытаюсь сделать расчетное предположение:

Исключение не обрабатывается, или, если обработано, перебрасывается.Исключение распространяется на обработчик ошибок страницы.

В любом случае, где-то вдоль конвейера пузырьков исключений, обработчик исключений вызывает ISession.Close(), а затем использует исключение (и, таким образом, выполнение программы продолжается через рендеринг страницы)

Это не редкость, и обычно при откате транзакции рекомендуется также закрыть ISession.

Обратите внимание, что откат + закрытие может быть выполнен при неудачной фиксации, вВ этом случае неудачный вызов веб-службы каким-то образом загрязняет состояние вашего объекта, и, таким образом, происходит сбой фиксации.Опять же, исключение обрабатывается и используется.

Мельчайшая деталь в том, что некоторый кодовый путь, содержащий прокси-объекты nhibernate, все еще получает выполнение и пытается ссылаться на закрытый ISession

...