2011-02-01 8 views
3

EPiServer.configで宣言されたサイトが複数あるEPiServer 5.xエンタープライズプロジェクトEPiServer.Configuration.Settings.Instance - アプリケーションはsiteId = "x"の設定で初期化されますが、現在の要求はsiteId = "y"にマップされます

これらはEPiServer.config

<site description="Site 1" siteId="SiteOne"> 
    <siteHosts> 
    <add name="www.siteone.se" language="sv" /> 
    <add name="*"/> 
    </siteHosts> 
    <siteSettings .../> 
</site> 

<site description="Site 2" siteId="SiteTwo"> 
    <siteHosts> 
    <add name="www.sitetwo.fi" language="fi" /> 
    </siteHosts> 
    <siteSettings .../> 
</site> 

にサイトごとに、我々が経験してきた問題を宣言siteHosts各IISサイトのホストエントリに一致する同じWebルートを指してIISで個別のWebサイトとして設定されていますそれは、IISのサイトを1つ以上再起動してブラウザでそのサイトに移動すると(ランダムに見える)、スローされますRORとログ:クラスに探している場合

アプリケーションは、「のsiteId = "SiteTwo"

へ のsiteId = "SiteOne" の設定が、現在の 要求マップでEPiServer.Configurationが初期化されます。以下の設定を参照してください。現在のリクエストホストがEPiServer.configのsiteHostエントリと一致しない場合は、代わりにワイルドカード "*"を持つsiteHostサイトがデフォルトになります。

At least one <site> section must omit the <siteHosts> section, or <add name=\"*\"> to the <siteHosts> section. 

質問:これはなぜ起こるのでしょうか? IISのサイトは、別々のIPをリッスンするように構成されており、特定のホストにバインドされています。

質問:EPiServer.Configuration.Settings.Instanceにパブリックセッターがあるので、後でこれを手動で設定できるようにすることをお勧めしますか? (アプリケーションを再起動するのではなく、いくつかの.aspxなどを介して)

もちろん、半分焼いた.aspx修正プログラムをハッキングするのではなく、これを永続的に修正する方がよいでしょう。私は前に同じエラーが発生しました

public static Settings Instance 
{ 
    get 
    { 
     if (HttpContext.Current == null) 
     { 
      if (_instance == null) 
      { 
       throw new ApplicationException("First time you call Settings.Instance you must have a valid HttpContext."); 
      } 
      return _instance; 
     } 
     Settings settings = MapUrlToSettings(HttpContext.Current.Request.Url); 
     if (_instance == null) 
     { 
      _instance = settings; 
     } 
     else if (_instance != settings) 
     { 
      throw new ConfigurationErrorsException(string.Format("Application is initialized with settings for siteId=\"{0}\", but current request maps to siteId=\"{1}\"", _instance.Parent.SiteId, settings.Parent.SiteId)); 
     } 
     return _instance; 
    } 
    set 
    { 
     _instance = value; 
    } 
} 

public static Settings MapUrlToSettings(Uri url) 
{ 
    Settings settings; 
    if (url == null) 
    { 
     throw new ArgumentNullException("url", "An initialized Uri instance is required."); 
    } 
    if (!url.IsAbsoluteUri) 
    { 
     throw new ArgumentException("The Uri must be absolute to use for mapping.", "url"); 
    } 
    if (!string.IsNullOrEmpty(url.DnsSafeHost)) 
    { 
     settings = MapHostToSettings(url.DnsSafeHost, true); 
    } 
    else 
    { 
     settings = MapHostToSettings("*", true); 
    } 
    string absolutePath = url.AbsolutePath; 
    string str2 = settings.SiteUrl.AbsolutePath; 
    if (!absolutePath.StartsWith(str2, StringComparison.OrdinalIgnoreCase) && !string.Equals(absolutePath + "/", str2, StringComparison.OrdinalIgnoreCase)) 
    { 
     throw new ConfigurationErrorsException(string.Format("The URL \"{0}\" maps to siteId=\"{1}\" but has a path that is outside the application root (application root is \"{2}\").", url.ToString(), settings.Parent.SiteId, settings.SiteUrl.AbsolutePath)); 
    } 
    return settings; 
} 

public static Settings MapHostToSettings(string hostName, bool fallback) 
{ 
    Settings settings; 
    if (_hostToSettings == null) 
    { 
     InitializeAllSettings(); 
    } 
    if (_hostToSettings.TryGetValue(hostName, out settings)) 
    { 
     return settings; 
    } 
    if (!fallback) 
    { 
     return null; 
    } 
    return _hostToSettings["*"]; 
} 

答えて

2

:クラス "EPiServer.Configuration.Settings" から

。私のケースでは、IISのサイト用に複数のホストヘッダーが設定されていて、episerver.configのsitehosts定義に従って、これらのホストヘッダーの1つが間違っていました。

あなたが複数のホストヘッダーを使用する場合は、この刺激性EPiServerFramework.config、があり、それらは同じ「サイト」上で

4
EPiServer 6では

と上に設定されている保証するためにepiserver.configファイルに対してそれらをダブルチェックしています<automaticSiteMapping>というノードがあります。 episerverサイトに初めてアクセスすると、IISサイトIDと一致するキー値がEPiServerサイトIDに追加されます。

「アプリケーションがsiteId ...の設定で初期化されています」というエラーが発生する最も一般的な原因は、たとえばコンピュータを再インストールした(またはIISを少し変更した)というエラーです。異なる順序でサイトを表示します。たとえば、サイトXはId 1を最初に持っていますが、ID 2を取得します。Id 2を使用していたサイトYがあり、それをEPiServerFramework.configにマップした場合、例外がスローされます。

この取り除くためにfastes方法は

  1. は、あなたがあなたのコンピュータ名がわからない場合
  2. にアクセスしようとするサイトのIIS IDを検索右の「コンピュータ」をクリックしています'Properties'(コンピュータ名が表示されます)
  3. EpiserverConfigを開いて、コンピュータ名とIIS IDを含む行を見つけたら、別のサイトIDにマップされていることがわかります。
  4. その行を削除します。
  5. サイトを更新します。
関連する問題