私は、完全には理解できない実稼働のランタイム エラーをいくつか抱えています。これは、いくつかの異なる ASP.NET 4.0 Web サイトで発生しました (震え- はい、知っています - MVC に移植していますが、それには時間がかかります)。
まず第一に、開発/QA 環境でこの問題を再現できたことは一度もありません。第二に、展開時に、問題は存在しないようです。デプロイから 1 日か 2 日以内に問題が発生する場合もあれば、デプロイが 1 か月間有効であり、まったく発生しない場合もあります。ただし、いったんマニフェストが発生すると、Web サイトで表示されるすべてのページでエラーが発生します。最後に、この問題は、.NET 4.0 に移行して初めて発生したようです。2.0 から開始し、1 年前に 3.5 に引き上げ、最近、このソリューションとほとんどの子プロジェクトで 4.0 に引き上げました。
エラー:
Could not find the sitemap node with URL '~/Default.aspx'.
サイトマップの簡略版 (一部の名前を変更し、不要なノードを削除) は次のとおりです。
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode roles="*" title="EG">
<siteMapNode url="~/../SM/Default.aspx" title="Welcome" description="" roles="*" />
<siteMapNode url="~/../SD/Default.aspx" title="SD" description="" roles="*" />
<siteMapNode url="~/../SMD/Default.aspx" title="SMD" description="" roles="*" />
<siteMapNode url="~/Default.aspx" title="Ops" description="" roles="*" >
<siteMapNode url="~/Error.aspx" title="Error" hide="true" roles="*" />
<siteMapNode url="~/Public/Login.aspx" hide="true" roles="*" />
<siteMapNode url="~/Manager/LPCE.aspx" title="LPCE" description="" roles="Administrator, Manager, System, Marketer" imageUrl="~/../SM/images/icons/LF.jpg" />
</siteMapNode>
<siteMapNode url="~/../SDD/Default.aspx" title="SDD" description="" roles="*" />
<siteMapNode url="~/../CCD/Default.aspx" title="CCD" description="" roles="*" />
<siteMapNode url="~/../RD/Default.aspx" title="RD" description="" roles="*"/>
<siteMapNode url="~/../SBD/Default.aspx" title="SBD" description="" roles="*" />
</siteMapNode>
</siteMap>
これは、web.config に登録されています。
<siteMap defaultProvider="SDXmlSiteMapProvider" enabled="true">
<providers>
<add name="SDXmlSiteMapProvider" type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" siteMapFile="web.sitemap" securityTrimmingEnabled="true" />
<add name="SecurityDisabledSiteMapProvider" type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" siteMapFile="web.sitemap" securityTrimmingEnabled="false" />
</providers>
</siteMap>
そして、ログから、エラーの原因を絞り込みました。これは、ほとんどすべてのページの派生元である基本クラスにあります。
private void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
SiteMapDataSource.StartingNodeUrl = "~/Default.aspx";
}
}
すべてのサイトマップで、url="~/Default.aspx" と roles="*" (パブリック/匿名アクセスを含む) を持つノードがあることを確認したため、この問題が発生する理由について非常に混乱しています。
私が考えた問題:
- SiteMap には Default.aspx のノードがありません。それらのすべてがそうです。
- セキュリティ上の理由から、現在のユーザー/ロールは SiteMap の Default.aspx ノードにアクセスできません。それらはすべて匿名ユーザーがアクセスでき、この問題はスーパー管理者ユーザーにも存在します.
- 渡された URL にはクエリ文字列が含まれています (Default.aspx?abcd)。これが問題かどうかはわかりませんが (問題が発生しないことを願っています)、問題が明らかになったら、クエリ文字列を使用せずに URL を手書きできますが、問題はまだ存在します。
- サイトマップの変更。それはしません
- サイトマップ ファイルに対するサービスのアクセス許可。サイトマップは展開後に完全に機能するため、IISRESET が修正する方法でアクセス許可が変更されない限り、これは問題になりません。
- ワーカー プロセスがグローバルに破損します。私はそうは思わない。12 個までの Web サイトがすべて同じアプリ プールにあり、問題は常に 1 つの Web サイト内に限定されています。また、これまでに 4 つの異なる Web サイトで発生しましたが、一度に複数の Web サイトでこれが発生したことはまだありません。
誰でもこれに光を当てることができますか?動的にコンパイルされた SiteMap が破損したかのように見えます。私が見つけた唯一の解決策は、IISRESET
または同等のものです。それでも、問題が解決されるまでの期間はわかりません。これは非常にイライラします!