IIS 7.5 - Вимкнути властивість перекритого рециркулятора не дотримуватися, коли web.config оновлюється


25

У мене є сайт, який містить ексклюзивний замок на деяких ресурсах. Я використовував події .NET Application_Start і Application_End, щоб придбати та випустити блокування цих ресурсів у відповідний час. Щоб це працювало належним чином, у будь-який момент часу може працювати лише один екземпляр моєї програми.

Щоб це сталося, я встановив Disable Overlapped Recycleвластивість у пулі додатків значення True. Ця властивість повинна гарантувати, що старий робочий процес повністю припиниться до запуску нового, коли пул додатків переробляється. Це прекрасно спрацьовує, коли пул додатків переробляється вручну через IIS, автоматично в результаті досягнення або вичерпання часу очікування або автоматично відповідно до будь-яких певних правил інтервалу часу та часу.

Однак, коли веб.config для веб-сайту оновлюється, це правило не застосовується - новий робочий процес починається до того, як старий закінчується завершенням роботи. Це спричиняє погані речі. У мене Disable Recycling for Configuration Changesвластивість встановлено так, Falseяк я хочу, щоб пул додатків перероблявся під час оновлення web.config - це часто трапляється під час розробки.

Це щось, що очікується, або це помилка в IIS? Я єдиний варіант налаштувати так, щоб зміна web.config не переробляла пул додатків? Я б краще цього не робив, оскільки я впевнений, що це призведе до багатьох головних болів, коли люди змінюють конфігурацію, а потім забудуть переробити пул додатків.

Оновлення:

Якщо бути більш зрозумілим, коли startподія нового робочого процесу викликається до завершення роботи старого робочого процесу, тоді endподія старого робочого процесу ніколи не викликається - це не відбувається послідовно, воно ніколи не відбувається взагалі.


Скільки часу після оновлення web.config до запуску нового робочого процесу?
Грег Аскеу

Новий робочий процес починається, як тільки я намагаюся зайти на сайт після переробки - Отже, менше секунди, якщо я швидкий. Якщо залишити, подія старого робочого процесу "відключення" відбувається 20-30 секунд після переробки.
Джон

У мене те саме питання. Є перекриття
Ендрю Ріммер

11
Редагування файлу web.config призводить до повторного завантаження програми appDomain. Домен appDomain відокремлений від AppPool. Ви не повинні бачити новий ідентифікатор процесу W3WP лише після зміни web.config. Дивіться тут treeloop.com/blog/iis-application-domain-and-pool-recycling
kheld

1
@kheld абсолютно прав (можливо, додайте це як відповідь). Це не перекриття appool, це перекриття appDomain. Я не вірю, що ви можете це зупинити, але ви можете відключити переробку домену додатків на зміну.
Сем Коган

Відповіді:


1

З цієї публікації MSDN: https://blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/

Отже, як частина процесу розгортання вашого коду, схоже, що ваш пул буде перероблятись під час розгортання будь-якої з цих змін:

Негайну переробку

  • Зміни Web.config
  • Зміни Machine.config
  • Зміни Global.asax
  • Змінення каталогу каталогів
  • Зміни App_Code

( запозичено з: /programming/302110/what-causes-an-application-pool-in-iis-to-recycle )

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.