O compartilhamento de sessões do Serviço de Estado do ASP.NET entre o IIS7.5 e o 8.0 não funciona

3

Eu tenho um web farm composto por 5 máquinas Server 2008R2 executando o IIS 7.5. Todos eles compartilham estado de sessão usando um único servidor separado executando o Serviço de Estado do ASP.NET (este também executa o 2008 R2). Tudo está funcionando maravilhosamente.

No entanto, eu adicionei agora um sexto servidor, este executando o 2012 / IIS 8.0. Por toda a vida, não consigo fazer com que este servidor compartilhe o estado da sessão com os outros servidores.

A configuração machineKey é exatamente a mesma (anônima):

<machineKey validationKey="XYZ" decryptionKey="ZYX" validation="SHA1" />

O ID do aplicativo é exatamente o mesmo em todos os servidores (nós executamos vários sites, mas todos têm o ID criado programaticamente, a configuração é idêntica, verificada em tempo de execução também):

/LM/W3SVC/10351/ROOT

Todos os sites também têm o mesmo AppPath, também verificado em tempo de execução:

D:\SomeSite\SomApp\

A configuração da sessão é exatamente a mesma:

<sessionState mode="StateServer" partitionResolverType="MyStateServerPartitionResolver" stateNetworkTimeout="30" timeout="20" />

A classe MyStateServerPartitionResolver é muito simples, apenas abstraindo o fato de que nós carregamos a string de conexão através de nossa própria configuração (o valor de connectionString é idêntico em todos os servidores, também verificado):

public class MyStateServerPartitionResolver : IPartitionResolver
{
    private string connectionString;

    public void Initialize()
    {
        connectionString = ConfigSettings.StateServerConnectionString;
    }

    public string ResolvePartition(object key)
    {
        return connectionString;
    }
}

Todos os sites são executados no .NET 4.0 e a configuração do pool de aplicativos também é a mesma.

A única diferença que posso reduzir é o fato de que os servidores em funcionamento estão todos executando o IIS 7.5, enquanto o não operacional está executando o IIS 8.0. No entanto, eu esperaria que esse fosse um cenário suportado, já que é difícil fazer uma atualização sem interrupção.

Alguma sugestão sobre o que posso fazer para depurar isso? Ou qualquer confirmação de documentação que o IIS 7.5 & 8.0 não pode compartilhar o estado da sessão?

    
por Mark S. Rasmussen 01.10.2013 / 16:39

1 resposta

1

Então, este foi um momento clássico de se ver cego sobre a questão simples.

Embora todas as máquinas tenham sido totalmente atualizadas e a configuração fosse idêntica, perdi o fato de que o Server 2012 nasceu com o .NET 4.5 instalado nativamente. E mesmo que você selecione v4.0 como a versão do .NET Framework no IIS, ele está na verdade executando 4.5 nos bastidores.

E, por sorte, a chave da sessão mudou entre 4.0 e 4.5, fazendo com que perdêssemos as sessões quando o usuário era alternado entre servidores que executavam 4.0 e 4.5.

A instalação do .NET 4.5 Framework em todos os servidores 2008 R2 corrigiu o problema.

    
por 03.10.2013 / 11:02