IIS 7.5 - Desabilitar a propriedade Reciclagem sobreposta não sendo obedecida quando o web.config for atualizado

25

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 Recyclepropriedade 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 Changespropriedade definida Falsecomo 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 startevento do processo do operador é chamado antes que o processo do antigo trabalhador termine de desligar, o endevento do processo do antigo trabalhador nunca é chamado - Isso não acontece fora da sequência, nunca acontece.

John
fonte
Quanto tempo após o web.config ser atualizado antes do início do novo processo de trabalho?
Greg Askew
O novo processo de trabalho inicia assim que eu tento acessar o site após uma reciclagem - menos de um segundo se eu for rápido. Se deixado, o evento 'shutdown' do processo antigo do trabalhador ocorre 20 a 30 segundos após a reciclagem.
John
Eu tenho o mesmo problema. Há sobreposição
Andrew Rimmer
11
A edição do arquivo web.config faz com que o appDomain seja recarregado. O appDomain é separado do AppPool. Você não deve ver uma nova identificação de processo do W3WP apenas alterando o web.config. Veja aqui treeloop.com/blog/iis-application-domain-and-pool-recycling
armazenado em
1
@kheld está absolutamente certo (talvez adicione isso como resposta) isso não é uma sobreposição de appool, é uma sobreposição de appDomain. Não acredito que você possa parar com isso, mas você pode desativar a reciclagem do domínio do aplicativo ao alterar.
Sam Cogan

Respostas:

1

Nesta publicação do MSDN: https://blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/

Portanto, como parte do processo de implantação de código, parece que seu pool será reciclado quando você implantar qualquer uma dessas alterações:

Reciclagem imediata

  • Alterações no Web.config
  • Alterações no Machine.config
  • Global.asax changes
  • Alterações no diretório bin
  • Alterações no App_Code

( emprestado de: /programming/302110/what-causes-an-application-pool-in-iis-to-recycle )

Matt McDonald
fonte