У меня есть две jqGrids, которые загружают данные через вызов ajax POST на мой контроллер, и каждый раз, когда я запускаю приложение, только один из двух POST выполняется успешно. Обычно, если я нажимаю кнопку обновления в браузере, обе сетки будут загружаться правильно. Но последовательно 1 из 2 терпит неудачу при первой загрузке каждого представления (у меня есть два представления / страницы, у каждого из которых есть 2 jqGrids, "стиль панели инструментов"). В журналах log4net два запроса имеют разные потоки, и один всегда терпит неудачу, в то время как другой успешно, но тот, который успешно выполняется, является случайным (вероятно, первым пришел, первым обслужен) ... Иногда я получаю нулевую ссылку на ошибку, когда он пытается перебрать результирующий перечислимый список элементов, в других случаях я получаю «Соединение не было закрыто. Текущее состояние соединения подключается».
У меня есть некоторые подозрения, что может быть причиной этого: отложенная загрузка EF / прокси-серверы включены, неправильная конфигурация windsor, ошибка автоматического обработчика, которая не генерируется или не отображается в трассировке стека. Но так как у меня действительно нет никакой подсказки, ниже моя установка на случай, если она поможет расшифровать это.
Постоянство [LifestyleSingleton] - содержит текстовый текст EF4 (сначала код) и ссылку на EF4.3. Есть фабрика для создания контекста, называемая GetContext (), и эта фабрика реализует IDisposable.
Репо [LifestylePerWebRequest] - Содержит репозитории, реализующие шаблон репозитория и спецификации (http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/).
Услуги [LifestylePerWebRequest] - вызывает репо и применяет шинную логику, то есть возвращает объекты PagedList для подкачки пользовательского интерфейса.
Контроллеры [LifestyleTransient] - контроллеры mvc, для автоматического отображения типов моделей используется автоматический преобразователь.
MVC UI - Я реализую Lib.Web.MVC, который создает строго типизированную оболочку для jqGrid. И отсюда я использую контейнер Виндзор, чтобы сделать DI.
ОБНОВЛЕНИЕ: Я изменил все компоненты для регистрации в LifestylePerThread, и все ошибки, похоже, были устранены с помощью этого. Тем не менее, я не понимаю, почему .. Я новичок в DI, так что я уверен, что что-то упустил. Может кто-нибудь объяснить, почему это решило проблему? И что это изменение сделает с масштабируемостью ...? Я решил, что хочу, чтобы фабрика контекста вместе с самим контекстом была зарегистрирована как синглтон, но это, очевидно, было неправильно.