2015-12-10 24 views
3

我试图获得一个基本的布局和运行在Sitecore 8.1中,并且我遇到了一个错误,可以找到很少的信息。当试图查看任何页面(甚至是后端界面或从Sitecore Rocks连接)时,我收到消息“没有发现会话Id管理器管理当前请求的会话Id。”Sitecore 8.1错误:“没有会话Id经理被发现管理当前请求的会话ID”

一些谷歌搜索表示,这与现成的会话提供商的一些问题有关,并建议将其交换出去以便在Mongo中保留会话。 Sitecore的文档对sharedprivate会话都提供了相关描述。我试图实现这些,但仍然收到相同的错误。

这里是我的代码,目前的情况是:

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 /包含/ 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的连接),并使用use sessionuse sharedsession创建了会话和共享数据库,我知道这是在Mongo中创建数据库的方式。

我在这里错过了什么吗?或者错误是不是意味着我认为的意思?

回答

3

如果它对别人有帮助,我们在升级到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.zipthe downloads page

5

你所看到的信息不应该是一个错误,而是一个日志警告。它与检索会话ID管理器的配置有关,而与检索会话本身的配置有关。

为什么这个警告通常会出现

Sitecore.config<pipelines>下有定义的getSessionIdManager管道。

Sitecore.FXM.config,有配置成用于这条管线的处理器:

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

此管道允许动态地选择用于所述请求的会话ID管理器。在默认Sitecore配置中,非默认会话ID管理器将仅用于具有显式sessionId URL参数的请求,即仅用于FXM请求。

对于所有其他请求,将不显式选择会话ID管理器,并且将使用默认的System.Web.SessionState.SessionIDManager;这反映在您看到的警告消息中。这种情况本身没有任何问题,这是默认和设计。

看到在每一个页面请求

这肯定听起来像一个缺陷给我的消息是一个错误。该消息应该是已记录每个应用程序生命周期一次,而不是作为每个页面上的异常抛出。

您应该将此报告给Sitecore支持。

尝试解决

我不能调试你的系统,所以我必须这样做蒙住眼睛。我会尝试创建自己的会话ID经理选择:

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

将其配置为在getSessionIdManager管道最后处理器。这将确保始终存在明确选择的会话ID管理器,并且应该有希望防止错误发生。

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <pipelines> 
     <getSessionIdManager> 
     <processor type="YourNamespace.CustomSessionIdManagerProcessor, YourAssembly" /> 
     </getSessionIdManager> 
    </pipelines> 
    </sitecore> 
</configuration> 
+0

它没有显示为警告,它是一种防止呈现任何东西的异常(特别是“Sitecore.Exceptions.ProviderConfigurationException”,如果完全有用的话)。它实际上并不出现在日志中,这是我为什么在查找时遇到太多麻烦的一部分。我会尝试你的临时修复并回报。 –

+0

@MichaelSmith我误解了你的错误。请提供一个截图,或者甚至更好,作为您的问题的一部分的完整堆栈跟踪。 你看到的信息是**真**应该是一个日志警告,没有别的:http://i.imgur.com/UH3W3yb.png –

+0

我想我已经设法解决它,实际上。我从web.config中的'sessionState'节点中删除了'sessionIDManagerType =“Sitecore.FXM.SessionManagement.ConditionalSessionIdManager”'[1],错误消失了。不过,我现在又遇到了另一个问题[2],并且我正在尝试确定它是否与我的修复无关或由其造成。 [1]我想我在那里处理一个较早的FXM相关问题。 [2]目前没有布局,甚至没有启动板。一切都在寻找一个全部为零的布局作为GUID,它不存在。 –