Проблема NHIbernateIntegration ISessionManager с потоками IIS - PullRequest
1 голос
/ 27 июля 2011

Мы видим очень странную проблему с приложением ASP.NET, которое недавно было обновлено до NHibernate 3.10GA, Castle 2.5.2 и с использованием Castle.Facilities.NHibernateIntegration.Мы используем ISessionManager из NHibernateIntegration с компонентом Web.SessionWebModule для управления нашим циклом ответа на запрос, и для него настроено значение isWeb = true.

Наше приложение возвращает страницу для параметра, закодированного в URL, и эта страница также впоследствииделает некоторые вызовы веб-службы.

Проблема возникает очень периодически и проявляется как NHibernate.LazyInitializationException - Не удалось инициализировать прокси-сервер - нет ошибки сеанса, вызванной отложенной загрузкой многие-к-одномуОтношения с основным объектом.Это может означать, что объект сеанса теряется в цикле запрос-ответ для страницы.

Мы решили отладить методы OnBeginRequest и OnEndRequest в Castle.Facilities.NHibernation и добавили несколько операторов отладки для идентификациинить.Мы обнаружили следующее:

В тех случаях, когда возникает ошибка, threadId в OnBeginRequest не соответствует threadId в OnEndRequest;и далее кажется, что исходный поток используется для других запросов и ответов.Когда исходный запрос страницы наконец возвращается, его threadid не совпадает с исходным threadid, в котором он был запущен. Кто-нибудь видел что-нибудь подобное?

Вот данные отладки.Обратите внимание, что [9] указывает исходящий поток согласно log4net

[9] DEBUG SessionWebModule - On begin request thread id: 9 for MyPage.aspx
[9] DEBUG SessionWebModule - On begin request thread id: 9 for example.ashx
[9] DEBUG SessionWebModule - On end request thread id: 9 example.ashx
[9] DEBUG SessionWebModule - On begin request thread id: 9 for WebService.asmx/js
[9] DEBUG SessionWebModule - On end request thread id: 9 for WebService.asmx/js
[6] ERROR NHibernate.LazyInitializationException - [error message describing relationship] -Could not initialize proxy - no Session.
[6] DEBUG SessionWebModule - On end request thread id: 9 for MyPage.aspx

Обратите внимание на первую и последнюю строку, показывающие, что запрос страницы возник в потоке 9, но вернулся в потоке 6.

1 Ответ

0 голосов
/ 27 июля 2011

Я полагаю, вы находитесь на IIS 7 и asp.net 2.0? Если да, попробуйте установить MaxConcurrentRequestsPerCPU

http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...