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["*"];
}