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