Требуется больше информации, но я попытаюсь сделать расчетное предположение:
Исключение не обрабатывается, или, если обработано, перебрасывается.Исключение распространяется на обработчик ошибок страницы.
В любом случае, где-то вдоль конвейера пузырьков исключений, обработчик исключений вызывает ISession.Close()
, а затем использует исключение (и, таким образом, выполнение программы продолжается через рендеринг страницы)
Это не редкость, и обычно при откате транзакции рекомендуется также закрыть ISession
.
Обратите внимание, что откат + закрытие может быть выполнен при неудачной фиксации, вВ этом случае неудачный вызов веб-службы каким-то образом загрязняет состояние вашего объекта, и, таким образом, происходит сбой фиксации.Опять же, исключение обрабатывается и используется.
Мельчайшая деталь в том, что некоторый кодовый путь, содержащий прокси-объекты nhibernate, все еще получает выполнение и пытается ссылаться на закрытый ISession