Ошибка Sitecore 8.1: "Не найдены менеджеры идентификатора сеанса для управления идентификатором сеанса для текущего запроса"

Я пытаюсь настроить базовый макет и запустить его в Sitecore 8.1, и у меня возникла ошибка, о которой я могу найти очень мало информации. При попытке просмотреть любую страницу (даже внутренний интерфейс или соединение с Sitecore Rocks) я получаю сообщение "Не найдено менеджеров идентификаторов сеансов для управления идентификатором сеансов для текущего запроса".

Некоторые специалисты по поиску в Google предполагают, что это связано с некоторыми проблемами с поставщиком стандартных сессий, и рекомендуют заменять его для сохранения сеансов в Mongo. Документация Sitecore содержит описание этого как для общих, так и для частных сессий. Я пытался реализовать их, но продолжаю получать ту же ошибку.

Вот мой код в его нынешнем виде:

App_Config / Включить / MongoSessionProvider.config

<?xml version="1.0"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <tracking>
      <sharedSessionState>
        <providers>
          <clear/>
          <add name="mongo" type="Sitecore.SessionProvider.MongoDB.MongoSessionProvider, Sitecore.SessionProvider.MongoDB" connectionString="session" pollingInterval="2" compression="true" sessionType="shared"/>
        </providers>
      </sharedSessionState>
    </tracking>
  </sitecore>
</configuration>

App_Config / Include / ConnectionStrings.config (выдержка)

<add name="session" connectionString="mongodb://localhost/sharedsession" />

Web.config (отрывок)

<sessionState mode="Custom" cookieless="false" timeout="20" sessionIDManagerType="Sitecore.FXM.SessionManagement.ConditionalSessionIdManager" customProvider="mongo">
  <providers>
    <add name="mongo" type="Sitecore.SessionProvider.MongoDB.MongoSessionStateProvider, Sitecore.SessionProvider.MongoDB" sessionType="Standard" connectionStringName="session" pollingInterval="2" compression="true" />
    <add name="mssql" type="Sitecore.SessionProvider.Sql.SqlSessionStateProvider, Sitecore.SessionProvider.Sql" sessionType="Standard" connectionStringName="session" pollingInterval="2" compression="true" />
  </providers>
</sessionState>

Обратите внимание, что это на моей локальной машине разработки. У меня запущен Mongo (и он подтвердил свое подключение к Sitecore), и я создал в нем базы данных сессий и sharedsession, используя use session а также use sharedsessionЯ понимаю, что это способ создания БД в Монго.

Я что-то здесь упускаю? Или ошибка просто не означает, что я думаю?

2 ответа

Решение

В случае, если это кому-то поможет, мы столкнулись с этой проблемой и после обновления до Sitecore 8.1 rev. 151003.

В нашем конкретном случае проблема заключалась в изменении пространства имен в этой строке в файле Web.config:

<sessionState mode="InProc" cookieless="false" timeout="20"
 sessionIDManagerType="Sitecore.FXM.SessionManagement.ConditionalSessionIdManager">

Это должно быть следующим:

<sessionState mode="InProc" cookieless="false" timeout="20"
 sessionIDManagerType="Sitecore.SessionManagement.ConditionalSessionIdManager">

Возможно, это было то, что мы пропустили в руководстве по обновлению, но мы, наконец, нашли его после того, как сняли копию Sitecore 8.1 rev. 151003.zip со страницы загрузок.

Сообщение, которое вы видите, не должно быть ошибкой, это скорее предупреждение журнала. Это связано с получением конфигурации диспетчера идентификаторов сеансов, а не с конфигурацией самого сеанса.

Почему обычно появляется это предупреждение

В Sitecore.config под <pipelines> есть getSessionIdManager трубопровод определен.

<getSessionIdManager>
</getSessionIdManager>

В файле Sitecore.FXM.config для этого конвейера настроен процессор:

<getSessionIdManager>
  <processor type="Sitecore.FXM.Pipelines.ChooseSessionIdManager.FXMSessionIdManagerProcessor, Sitecore.FXM" />
</getSessionIdManager>

Этот конвейер позволяет динамически выбирать Session ID Manager для запроса. В конфигурации Sitecore по умолчанию диспетчер идентификаторов сеансов не по умолчанию будет использоваться только для запросов с явным sessionId Параметр URL, т.е. только для запросов FXM.

Для всех других запросов менеджер идентификатора сеанса не будет выбран в явном виде, и по умолчанию System.Web.SessionState.SessionIDManager будет использоваться; это отражено в предупреждающем сообщении, которое вы видите. В этой ситуации нет ничего плохого, это по умолчанию и по замыслу.

Видя сообщение как ошибку при каждом запросе страницы

Это определенно звучит как дефект для меня. Предполагается, что это сообщение регистрируется один раз за время существования приложения, а не генерируется как исключение на каждой странице.

Вы должны сообщить об этом в службу поддержки Sitecore.

Попытка исправить

Я не могу отладить вашу систему, поэтому я должен сделать это с завязанными глазами. Я бы попробовал создать собственный селектор Session ID Manager:

public class CustomSessionIdManagerProcessor
{
    public void Process(GetSessionIdManagerArgs args)
    {
        if(args.SessionIdManager == null)
        {
            args.SessionIdManager = new System.Web.SessionState.SessionIDManager();
        }
    }
}

Настройте его как последний процессор в getSessionIdManager трубопровод. Это обеспечит всегда наличие явно выбранного диспетчера идентификаторов сеансов и, как мы надеемся, предотвратит возникновение ошибки.

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <getSessionIdManager>
        <processor type="YourNamespace.CustomSessionIdManagerProcessor, YourAssembly" />
      </getSessionIdManager>
    </pipelines>
  </sitecore>
</configuration>
Другие вопросы по тегам