Как мы все знаем, непросто реализовать приложение, работающее круглосуточно и без выходных. Один из моих проектов однажды продержался более 20 часов под сильной нагрузкой и все равно героически погиб. К счастью, ASP.NET и IIS предоставляют нам несколько простых возможностей, позволяющих легко создавать сверхстабильные приложения .Net. Однако немного неприятно то, что методы настройки в системах Windows 2000 (версии ниже IIS6.0) и Windows 2003 (IIS6.0) различаются.
Давайте сначала поговорим о системе Windows 2000. Те, кто знаком с ASP.NET, должны знать файл Machine.config. Он хранится в каталоге %WindowPath%Microsoft.NetFramework%.NetVersion%CONFIG. Используйте любой текстовый редактор (самый популярный, конечно, «Блокнот»), чтобы открыть файл и найти раздел <processModel...>. ASP.NET управляет процессом службы ASP.NET (aspnet_wp.exe или w3wp.ext) на основе настроек в этом разделе. Код приложения ASP.NET, который мы написали, выполняется в этом пространстве процесса. Если вы используете Framework 1.1, в этом разделе вы увидите более n свойств. Нас интересуют следующие три, за которыми следует знак равенства, которые являются их значениями по умолчанию:
timeout="Infinite"
dleTimeout="Infinite"
MemoryLimit="60"
Вы не можете увидеть их в Framework 2.0, но можете добавить их вручную.
Позвольте мне перевести значение этих трех атрибутов. После непрерывной работы в течение времени, указанного в таймауте, перезапустите процесс службы ASP.NET. Значение таймаута по умолчанию — бесконечность. Его можно сбросить в формате «ЧЧ:ММ:СС». " , например, timeout=24:00:00 означает перезапуск через 24 часа; если никто не осуществляет доступ в течение времени, указанного вdleTimeout, перезапустите процесс службы ASP.NET. Значение по умолчанию дляdleTimeout также бесконечно, а метод настройки как указано выше; если процент памяти, используемой процессом службы ASP.NET, в общей системной памяти превышает объем, указанный в параметре MemoryLimit, процесс службы ASP.NET будет перезапущен.
Поймите, благодаря взаимодействию этих трех атрибутов процесс службы можно перезапустить, не зная об этом, чтобы наше приложение могло продолжать работать. Когда я говорю это, внимательные читатели, возможно, обнаружили проблему. При перезапуске процесса службы сеанс клиента неизбежно будет потерян, а работа пользователя прервана. Как мы можем достичь того, что «Бог не знает и призраки не знают»?
Эта проблема действительно существует, но ее влияние можно свести к минимуму или даже полностью устранить с помощью следующих мер:
Во-первых, мы можем установить дляdleTimeout разумное значение, обычно я устанавливаю его равным 1,5-1,5 настройки таймаута сеанса 3 раза. Установите верхний предел времени ожидания, который может сохраняться программа. Обычно я устанавливаю его на 24 часа. Это заставит процесс службы перезапуститься, когда он простаивает. Поскольку в данный момент сеанса нет, прервать работу пользователя невозможно. Эта установка очень эффективна в офисах малых и средних предприятий, поскольку доступ в нерабочее время практически отсутствует.
Конечно, описанный выше метод имеет большие ограничения и может работать только в определенных ситуациях. Если кто-то продолжит доступ или перезапустится, когда объем памяти превысит лимит, работа пользователя все равно будет мешать. Окончательное решение — сохранить состояние сеанса в отдельном процессе. В ASP.Net это также возможно с помощью простой настройки.
Источник: комната записи БЛОГА.