Совместное использование состояния сеанса между различными версиями .NET с помощью State Server

Background We have one website running on IIS 6 (Win2003 Server) using .NET 3.5: site1.mysite.local We have a second website running on IIS 7 (Win2008 Server) using .NET 4.0: site2.mysite.local

На каждом сайте web.config содержит StateServer и один и тот же ключ machineKey:

<sessionState mode="StateServer" stateConnectionString="tcpip=STATESRV01:42424" />

<machineKey decryptionKey="EDCDA6DF458176504BBCC720B4E29348E252E652591179E2" validationKey="CC482ED6B5D3569819B3C8F07AC3FA855B2FED7F0130F55D8405597C796457A2F5162D35C69B61F257DB5EFE6BC4F6CEBDD23A4112C4519F55185CB5EB3DFE61"/>

У нас также есть обработчик событий PostRequestHandlerExecute для изменения & quot; NET_SessionId & quot; cookie, чтобы иметь тот же корневой домен и путь.

cookie.Domain = ".mysite.local";
cookie.Path = "/";

В файле global.asax у нас есть следующий код для изменения имени приложения в событии Application_Start:

    protected void Application_Start(object sender, EventArgs e)
    {
        string applicationName = "mysiteapp";

        // Change the Application Name in runtime.
        FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime",
            BindingFlags.Static | BindingFlags.NonPublic);
        HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
        FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId",
            BindingFlags.Instance | BindingFlags.NonPublic);

        appNameInfo.SetValue(theRuntime, applicationName);
    }
Result

Оба сайта возвращают один и тот же идентификатор сеанса, но когда мы пытаемся установить значение сеанса на сайте 1, сайт 2 не возвращает значение.

Site 1 (site1.mysite.local) Result

Session ID (Session.SessionID): a55jnfcscxd3f0hnwoik02pp
Session Value: True

Site 2 (site2.mysite.local) Result

Session ID (Session.SessionID): a55jnfcscxd3f0hnwoik02pp
Session Value: 
Question

Насколько я понимаю, State Server отключает сеанс от комбинации файла cookie SessionID, ключа компьютера и имени приложения, которое мы пытались обновить, поэтому оно одинаково для обоих сайтов. Проблема в том, что значение сеанса не распространяется на веб-сайты.

Why don't you use the SQL Server mode for Session State?

Возможно, нам придется, но мы надеялись вместо этого использовать наш State Server.

Кто-нибудь имел успех с State Server с несколькими веб-приложениями на нескольких серверах?

Ответы на вопрос(2)

Ваш ответ на вопрос