IIS 7.5 AppDomain recicla causando a perda da sessão após adicionar o diretório virtual ao 'Site padrão'

2

Espero que você possa me ajudar aqui, porque eu tentei obter algumas respostas em outro fórum ( veja aqui ) Esta pergunta é baseada em uma resposta de Scott Forsyth aqui .

Ao adicionar um novo diretório virtual ao 'site padrão' no Gerenciador do IIS, todos os outros Aplicativos localizados no site padrão são reciclados de alguma forma. Para simplificar meu problema, peguei um exemplo em que eu podia rastrear um timestamp de uma sessão atual e percebi que as informações da sessão estavam realmente se perdendo após a adição de um VD, o que significa que o AppDomain foi reciclado.

Esta é a situação:

Sites

Default Web Site

    1 (virtual directory) (d:\TestAppDomains\)

       - app1 (Application)           (using App Pool 1)

    2 (virtual directory) (d:\TestAppDomains\)

       - app2 (Application)           (using App Pool 2) 

Tanto quanto eu entendi adicionando um diretório virtual é apenas fazer alterações no applicationHost.config, que não deve causar o AppDomains para reciclar. Talvez seja uma questão de delegação, mas eu acho que não entendi o suficiente para entender: (

Existem propriedades que afetam esse comportamento? Eu já defini as configurações do AppPool para não reciclar após uma alteração na configuração, mas isso não ajudou.

Eu realmente apreciaria se você pudesse me ajudar com este, porque eu estou lutando com ele por quase 6 meses agora.

É claro que irei fornecer mais informações se você precisar delas.

Atualização 1:

O HealthMonitoring não pode me ajudar por dois motivos:

  1. Não é possível encontrar nenhuma entrada para a reciclagem da AppPool, onde deveria estar? Visualizador de Eventos - > Registros do Windows / logs de aplicativos e serviços? (Deve ser configurado corretamente)
  2. Talvez eu tenha algo errado. Primeiro eu pensei que é uma reciclagem de pool de aplicativos, mas com o teste simplificado eu construo um exemplo sem quaisquer aplicativos e pools de aplicativos adicionais. Agora é assim:

Sites

Default Web Site

    1 (virtual directory) (d:\TestAppDomains\)          
           session1.aspx (Sets current timestamp to session variable and redirects to session2.aspx)
           session2.aspx (displays session variable)

Ao chamar o localhost / 1 / sessions1.aspx, posso ver o timestamp. Depois de adicionar um segundo diretório virtual (por exemplo, "2" (d: \ TestAppDomains \ 2)) e atualizando a página, a sessão desapareceu, o que significa que a variável é nula.

Felicidades, Adam

    
por Adam P. 21.03.2012 / 13:37

2 respostas

2

Eu tive a mesma situação descrita no fórum do IIS : um site, vários pools de aplicativos, vários pares de Applications (web-service) e diretórios virtuais (html + js), implantação automatizada e assim por diante.

O problema era o mesmo: quando adicionei / removi o diretório virtual, todos os aplicativos foram reiniciados. Isso não foi bom, já que planejei servir várias versões e queria que os usuários trabalhassem enquanto a versão nova era implantada.

Eu joguei com delegação de configurações sem sucesso. Então notei que adicionar / remover um aplicativo não levou ao reinício de outros.

Então, essa foi a solução: crie para páginas da web aplicativos separados em vez do diretório virtual .

    
por 28.11.2012 / 12:53
1

Se você tiver um reinício do domínio do aplicativo do ASP.NET , as razões serão abordadas aqui:

link

Você tem pool de aplicativos reciclando o log de eventos habilitado? Esse seria o primeiro lugar que eu começaria:

SevocêtiverumaplicativoASP.NET,tambémpoderáativaroHealthMonitoringnaseçãosystem.webdoweb.config.Essasopçõesderegistropodemserúteisparaidentificaroqueestáocorrendo.Umaamostra:

<system.web><healthMonitoringenabled="true" heartbeatInterval="1">    
      <rules>
        <add name="HeartBeat" 
             eventName="Heartbeats" 
             provider="EventLogProvider" 
             profile="Default" 
             minInstances="1"
             minInterval="00:01:00"
             maxLimit="Infinite"/>
        <add name="App Lifetime"
             eventName="Application Lifetime Events"
             provider="EventLogProvider"
             profile="Default"
             minInstances="1" 
             minInterval="00:00:00"
             maxLimit="Infinite"/>
      </rules>
    </healthMonitoring>

FAQ - Monitoramento de integridade no ASP.NET 2.0
link

Elemento healthMonitoring (Esquema de configurações do ASP.NET)
link

    
por 21.03.2012 / 15:16