Тайм-аут приложения ASP.Net - PullRequest
0 голосов
/ 15 мая 2010

У меня есть только что развернутое приложение, которое по сложным причинам сохраняет все данные из базы данных в модуле, когда в первый раз требуются какие-либо данные из конкретной таблицы (т. Е. Когда клиент запрашивает просмотр продукта для в первый раз все данные о продукте хранятся в классе ProductManager (экземпляр которого хранится в общем свойстве класса SiteContent, благодаря чему ProductManager легко доступен с любой страницы).

Теперь забудьте, что вы, вероятно, теперь пристально смотрите на меня за использование этого подхода ... Я уверен, что он неэффективен, но я изучаю .Net только год или около того, поэтому я все еще учусь.

Одна вещь, которую я заметил, это то, что я могу зайти на сайт один раз, а затем снова посетить его через 5 минут, и он снова загрузит все данные в класс ProductManager. Похоже, это тайм-аут приложения .Net, так как тайм-аут сеанса установлен на 30 минут и, когда я вошел в систему на стороне администратора, он выходит из системы через 5 минут (ish).

Кто-нибудь знает, как это изменить? Можно ли как-то изменить это в коде, не связываясь с хостинговой компанией? Если нет в коде, есть ли способ изменить это в файле web.config?

Заранее спасибо.

С уважением,

Richard

Подробнее:

Модуль (SiteContent) хранит экземпляр каждого класса "Manager" - страницы могут вызывать Manager.Create, Manager.Update, Manager.Remove и т. Д. И т. Д. И использовать Manager.Items для доступа к списку элементов, хранящихся в диспетчере ( например, SiteContent.ProductManager.Items возвращает все продукты, хранящиеся в базе данных, а SiteContent.UserManager.Items возвращает список всех пользователей, хранящихся в базе данных). Кажется, что, поскольку это модуль, он распределяется между пользователями и загрузками страниц.

Я попытался вернуться на страницу и перезагрузить ее через 3 - 4 минуты, и она загружается нормально, но примерно через 5 минут требуется несколько секунд, чтобы снова загрузить страницу (не долго - но я бы предпочел, чтобы она не добавлялась несколько секунд до загрузки первой страницы каждые 5 минут).

Это особенно раздражает моего папу (владельца бизнеса), когда он вводит продукты, для входа в которые требуется более 5 минут, или которые при входе в него он делает перерыв на 2 минуты, а затем просит его снова войдите в систему, нажав на кнопку отправить, потеряв все свои данные одновременно. Я не использую метод, указанный в разделе аутентификации web.config для входа в систему - я использую форму с кнопкой входа в систему и, щелкая по ней, сравнивает введенные имя пользователя и пароль с именем каждого пользователя (через SiteContent.UserManager.Items).

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

При поиске в Google я обнаружил, что есть ExecutionTimeout и shutdownTimeout, которые я собираюсь изменить ...

Подробнее:

хм, кажется, я только что решил проблему времени загрузки страницы .. Я заметил, что тестовая база данных была более 13 МБ, а рабочая база данных была только 3 МБ. Я немного расследовал это.

Обычно журнал ошибок регистрируется каждый раз, и изображение не может быть найдено, если оно запрашивается на странице каталога. Тестовый сайт не обновлялся с изображениями, так как он не должен быть таким, поэтому таблица недостающих изображений поднялась до> 10MB .. и придется отключить регистрацию изображений при тестировании. Я удалил все из этой таблицы, и теперь все быстро загружается.

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

Спасибо, что потратили столько времени на это ..

С уважением,

Ричард

Ответы [ 4 ]

1 голос
/ 15 мая 2010

ASP.NET имеет различные разные таймауты, если вы используете FormsAuthentication, тогда FormsAuthentication имеет свой собственный тайм-аут, который отличается от Session Timeout, вы можете проверить раздел конфигурации System.Web проверки подлинности форм, вы будете знать, где увеличить ваш тайм-аут.

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

0 голосов
/ 21 июня 2011

Что касается ваших 5-минутных наблюдений, я обнаружил, что время простоя для пула приложений по умолчанию составило 5 минут (хотя в IIS 7.0 по умолчанию должно быть 20 минут).

Проверьте «Расширенные настройки» для пула приложений -> Модель процесса -> Время простоя (минуты). Вы можете полностью отключить тайм-аут, введя значение 0.

0 голосов
/ 15 мая 2010

Вы смешиваете 2 таймаута:

  1. Тайм-аут сеанса - как часто сервер очищает память из карты сеанса
  2. Тайм-аут Auth-cookie - как часто браузер клиента очищает куки.

Информация о 5 минутах хранится на стороне клиента в куки, чтобы изменить это время, посмотрите следующую строку в web.config:

    <authentication mode="Forms">
        <forms name=".ASPXFORMAUTH" 
              protection="All" 
              loginUrl="Login.aspx" 
              timeout="20"                 
              defaultUrl="Default.aspx"/>
    </authentication>
0 голосов
/ 15 мая 2010

Я не думаю, что какой-либо из этих таймаутов уместен.

Если я правильно понял, загрузка первой страницы запускает загрузку данных. Страница получает ссылку на данные, сохраняет ее в глобальной области и использует оттуда.

Если это правильно, похоже, что данные Page высвобождаются через несколько минут (что является разумным). Так как это освобождает последнюю ссылку на Модуль, Модуль получает сборщик мусора.

Вы пытались сохранить ссылку на данные в объекте Session? Это сохраняется намного дольше.

Звучит так, будто вы пытаетесь выполнить кеширование данных, может быть, именно этим вы должны заняться поиском.

Редактировать Поскольку то, что вы делаете (ввод данных), очень просто, одно из ваших основных предположений, вероятно, неверно, поэтому давайте посмотрим на пару ваших комментариев.

  1. Если ваш веб-сервер находится в каком-то удаленном месте, то скорость вашего локального соединения, вероятно, не имеет отношения к скорости чтения базы данных, но если вы действительно имеете в виду «несколько секунд», это может быть причиной того, почему страница занимает время загрузки.

  2. Сколько данных вы пытаетесь сохранить? Килобайт? Мегабайт? Гигабайт? Если это килобайт, можете ли вы сохранить его на странице?

  3. Помещать что-либо в Application_End () не имеет смысла. Это вызывается только в том случае, если само приложение оставалось неиспользованным так долго (скажем, 20 минут), что IIS указывает его завершить. Ничто из того, что вы делаете, ничего не изменит.

  4. Срок действия менеджеров не истекает, срок действия Page истекает, и вы, вероятно, не должны его менять.

  5. Когда вы пытались кэшировать, у вас все еще была проблема «данные базы данных ушли, пользователь вышел из системы, ввод данных потерян»? Или он просто стал «медленным»?

...