Eu tenho um site que possui um bloqueio exclusivo em alguns recursos. Usei os eventos .NET Application_Start e Application_End para adquirir e liberar o bloqueio desses recursos no momento apropriado. Para que isso funcione corretamente, só pode haver uma instância do meu aplicativo em execução a qualquer momento.
Para conseguir isso aconteça, eu configurei a Disable Overlapped Recycle
propriedade no agrupamento de aplicações para True
. Essa propriedade deve garantir que o processo de trabalho antigo seja encerrado completamente antes que um novo seja iniciado sempre que o pool de aplicativos for reciclado. Isso funciona bem sempre que o pool de aplicativos é reciclado manualmente pelo IIS, automaticamente como resultado do tempo limite de inatividade sendo atingido ou automaticamente de acordo com as regras específicas de intervalo de tempo / tempo.
No entanto, quando o web.config do site é atualizado, essa regra não está sendo aplicada - Um novo processo de trabalho é iniciado antes que o antigo termine o desligamento. Isso faz com que coisas ruins aconteçam. Eu tenho a Disable Recycling for Configuration Changes
propriedade definida False
como quero que o pool de aplicativos seja reciclado quando o web.config for atualizado - isso acontece com frequência durante o desenvolvimento.
Isso é algo que é esperado ou é um bug no IIS? É minha única opção de configuração para que a alteração do web.config não recicle o pool de aplicativos? Prefiro não fazer isso, pois tenho certeza de que causará muitas dores de cabeça com pessoas alterando a configuração e esquecendo de reciclar o pool de aplicativos.
Atualizar:
Para ser mais claro, quando o novo start
evento do processo do operador é chamado antes que o processo do antigo trabalhador termine de desligar, o end
evento do processo do antigo trabalhador nunca é chamado - Isso não acontece fora da sequência, nunca acontece.