Проблема утилизации пула приложений ASP.NET - PullRequest
4 голосов
/ 10 мая 2011

У меня есть настройка веб-проекта, в которой есть и мои веб-формы, и служба WCF. У меня возникает проблема, из-за которой мое приложение часто перезагружается, и я теряю все одноэлементные объекты и значения сеанса. Кажется, это не проблема тайм-аута, но, возможно, утечка памяти какой-то. Мы можем использовать приложение в течение минуты или около того, а затем бац, оно просто теряет все.

Я пытался отслеживать каталог на предмет изменений, но не обнаружил никаких изменений в файловой системе. Я также установил точку останова в Application_Error, и никаких ошибок не выдается.

Я два дня гуглял, пытаясь решить эту проблему. Приложение представляет собой прямое дублирование предыдущего проекта, который работает нормально. Одна вещь, которую я заметил, отличается от моего последнего проекта, который я использовал nHibernate для бэкэнда, и этот проект я перешел на использование Linq для SQL. Я заметил, что я не обрабатывал DataContext должным образом, потому что я уменьшал isntance DataContext внутри моих вызовов службы и возвращал значение перед тем, как когда-либо избавиться от контекста, или установил контекст обратно, поэтому я решил, что он может не закрываться. Я попытался вместо сохранения текста данных в своем классе «хранилище», я сохранил его внутри operationcontext и явно разместил его в Application_EndRequest. Это до сих пор не решило проблему.

У кого-нибудь есть предложения или места, на которые мне стоит посмотреть?

** ОБНОВЛЕНИЕ **: Я считаю, что нашел свою проблему. У меня есть объекты, которые используют EntitySet, и я сериализирую эти объекты напрямую, используя сериализуемое свойство IList с запросом linq, возвращающим список. Когда я попытался явным образом избавиться от своего текстового контекста перед возвратом данных, я столкнулся с проблемами, связанными с сериализацией этих EntitySet, потому что этот информационный текст больше не активен. Я попытаюсь скопировать данные в новый пустой объект с обычными списками вместо списков EntitySet и посмотреть, позволит ли это мне правильно закрыть мой текстовый текст и решить мою проблему.

Ответы [ 2 ]

1 голос
/ 11 мая 2011

Обновление - это совсем другой вопрос, но вам не следует пытаться сериализовать вещи, которые исходят от ORM - множество потенциальных кошмаров.Создайте себе несколько DTO.

0 голосов
/ 10 мая 2011

В консоли IIS7 выберите определенный пул приложений и выберите «Переработка ...» на панели действий слева. Это мастер, который позволяет вам определить, как пул приложений перезаписывается и как он регистрирует события перезапуска в журнале событий (стр. 2 мастера).

...