我一直有一些生产运行时错误,我不完全理解。这发生在我们两个不同的ASP.NET 4.0网站上(不寒而栗 - 是的,我知道 - 我们将它移植到MVC,但这需要一些时间)。Sitemap随着时间的推移而随机分布
首先,我们从来没有能够在开发/质量保证环境中重现此问题。其次,部署后,这个问题似乎是不存在的。有时候这个问题会在部署的一两天内展现出来,而其他时间部署将会持续一个月而不会显示出来。但是,一旦它出现,那么在网站下查看的任何页面都会导致错误。最后,这个问题似乎只有在我们迁移到.NET 4.0后才会出现。我们从2.0开始,一年前升至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>
而从日志我已经缩小了是什么原因导致错误是在一个基类几乎所有我们的p年龄从派生:
private void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
SiteMapDataSource.StartingNodeUrl = "~/Default.aspx";
}
}
我已确认在所有的Sitemaps存在与URL =“〜/ Default.aspx的”与角色的节点=“*”(包括公共/匿名访问),所以我很困惑,为什么会出现这个问题。
的问题我也考虑过:
- 地图不具备Default.aspx的一个节点。 所有这些都是。
- 由于安全原因,SiteMap的Default.aspx节点无法访问当前用户/角色。 它们都可以被匿名用户访问,甚至超级管理员用户也会遇到这个问题。
- 传入的URL包含查询字符串(Default.aspx?abcd)。 我不知道这是否是一个问题(我当然希望不会),但是一旦问题出现,我就可以手写URL而没有querystrings,问题依然存在。
- SiteMap变化。 它不是
- 服务对站点地图文件的权限。 站点地图在部署后工作得很好,因此除非以IISRESET修复方式更改权限,否则这不是问题。
- 工作进程变得全局损坏。 我不这么认为。我们有大约12个网站都在同一个应用程序池中,问题始终局限在单个网站中。此外,我们还没有发生过这种情况,但它一次只能在一个网站上发布,尽管迄今为止它已经在4个不同的网站中出现。
任何人都可以对此有所了解吗?它几乎看起来好像动态编译的SiteMap被损坏或什么的。我发现的唯一解决方案是IISRESET
或同等产品。即使如此,也不知道问题能够解决多久。这非常令人沮丧!
托管在哪个服务器上? – 2010-08-02 17:45:44
赢2003 R2标准 – Jaxidian 2010-08-02 18:57:33
我们仍然有这个问题,并仍然想有这个答案... – Jaxidian 2010-11-22 13:06:28