У мене є сайт, який містить ексклюзивний замок на деяких ресурсах. Я використовував події .NET Application_Start і Application_End, щоб придбати та випустити блокування цих ресурсів у відповідний час. Щоб це працювало належним чином, у будь-який момент часу може працювати лише один екземпляр моєї програми.
Щоб це сталося, я встановив Disable Overlapped Recycle
властивість у пулі додатків значення True
. Ця властивість повинна гарантувати, що старий робочий процес повністю припиниться до запуску нового, коли пул додатків переробляється. Це прекрасно спрацьовує, коли пул додатків переробляється вручну через IIS, автоматично в результаті досягнення або вичерпання часу очікування або автоматично відповідно до будь-яких певних правил інтервалу часу та часу.
Однак, коли веб.config для веб-сайту оновлюється, це правило не застосовується - новий робочий процес починається до того, як старий закінчується завершенням роботи. Це спричиняє погані речі. У мене Disable Recycling for Configuration Changes
властивість встановлено так, False
як я хочу, щоб пул додатків перероблявся під час оновлення web.config - це часто трапляється під час розробки.
Це щось, що очікується, або це помилка в IIS? Я єдиний варіант налаштувати так, щоб зміна web.config не переробляла пул додатків? Я б краще цього не робив, оскільки я впевнений, що це призведе до багатьох головних болів, коли люди змінюють конфігурацію, а потім забудуть переробити пул додатків.
Оновлення:
Якщо бути більш зрозумілим, коли start
подія нового робочого процесу викликається до завершення роботи старого робочого процесу, тоді end
подія старого робочого процесу ніколи не викликається - це не відбувається послідовно, воно ніколи не відбувається взагалі.