Eu tenho um site que possui um bloqueio exclusivo em alguns recursos. Eu 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 que isso aconteça, defini a propriedade Disable Overlapped Recycle
no pool de aplicativos como True
. Essa propriedade deve garantir que o processo antigo do trabalhador 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 por meio do IIS, automaticamente como resultado do tempo limite inativo ser atingido ou automaticamente de acordo com as regras específicas de intervalo de tempo / hora.
No entanto, quando o web.config do site é atualizado, essa regra não é 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 propriedade Disable Recycling for Configuration Changes
definida como False
, pois quero que o pool de aplicativos seja reciclado quando o web.config for atualizado - isso acontece com frequência durante o desenvolvimento.
Isso é algo esperado ou é um bug no IIS? É minha única opção para configurar de modo que a alteração do web.config não recicle o pool de aplicativos? Prefiro não fazer isso, pois tenho certeza de que isso causará muitas dores de cabeça para as pessoas que estão alterando a configuração e, em seguida, esquecendo de reciclar o pool de aplicativos.
Atualização:
Para ser mais claro, quando o novo processo de trabalho start
event for chamado antes do encerramento do processo de trabalho antigo, o antigo processo de trabalho end
event nunca será chamado - Não acontece fora de sequência nunca acontece de jeito nenhum.