2015-12-10 44 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,它不存在。 –