Назад | Перейти на главную страницу

Совместное использование сеансов службы состояний ASP.NET между IIS7.5 и 8.0 не работает

У меня есть веб-ферма, состоящая из 5 машин Server 2008R2, работающих под управлением IIS 7.5. Все они совместно используют состояние сеанса с помощью одного отдельного сервера, на котором работает служба состояний ASP.NET (на этом также работает 2008 R2). Все работает замечательно.

Однако теперь я добавил шестой сервер, на котором работает 2012 / IIS 8.0. Блин, я не могу заставить этот сервер делиться состоянием сеанса с другими серверами.

Конфигурация machineKey такая же (анонимная):

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

Идентификатор приложения одинаков на всех серверах (мы запускаем несколько веб-сайтов, но у всех идентификатор создан программно, конфигурация идентична, также проверяется во время выполнения):

/LM/W3SVC/10351/ROOT

Все сайты также имеют один и тот же AppPath, также проверенный во время выполнения:

D:\SomeSite\SomApp\

Конфигурация сеанса такая же:

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

Класс MyStateServerPartitionResolver очень прост, просто абстрагируется от того, что мы загружаем строку подключения через нашу собственную конфигурацию (значение connectionString идентично на всех серверах, также проверено):

public class MyStateServerPartitionResolver : IPartitionResolver
{
    private string connectionString;

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

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

Все сайты работают на .NET 4.0, и конфигурация пула приложений такая же.

Единственное отличие, которое я могу сузить, заключается в том, что все рабочие серверы работают под управлением IIS 7.5, а неработающий - под управлением IIS 8.0. Тем не менее, я бы ожидал, что это будет поддерживаемый сценарий, поскольку в противном случае было бы сложно выполнить последовательное обновление.

Есть предложения, что я могу сделать, чтобы отладить это? Или какое-либо документальное подтверждение того, что IIS 7.5 и 8.0 не могут совместно использовать состояние сеанса?

Так что это оказался классический момент, когда вы вслепую смотрели на простой вопрос.

Хотя все машины были полностью обновлены и конфигурация была идентична, я упустил тот факт, что Server 2012 родился с установленной .NET 4.5. И хотя вы выбрали v4.0 в качестве версии .NET Framework в IIS, на самом деле 4.5 негласно запускается.

И, как назло, ключ сеанса изменился между 4.0 и 4.5, что привело к потере сеансов при переключении пользователя между серверами с 4.0 и 4.5.

Установка .NET 4.5 Framework на все серверы 2008 R2 устранила проблему.