Asp.net 站点地图随时间随机中断
我一直有一些我不完全理解的生产运行时错误。我们在几个不同的ASP.NET4.0网站上都遇到过这种情况(令人不寒而栗-是的,我知道-我们正在将其移植到MVC,但这需要一些时间) 首先,我们从未能够在开发/质量保证环境中重现这个问题。第二,部署后,这个问题似乎不存在。有时,问题会在部署后一两天内显现,而其他时间,部署将持续一个月而根本不会显现。但是,一旦它显示出来,那么在网站下查看的任何页面都会导致错误。最后,这个问题似乎只有在我们迁移到.NET4.0之后才会出现。我们从2.0开始,一年前升级到了3.5,最近通过这个解决方案和大多数子项目升级到了4.0 错误:Asp.net 站点地图随时间随机中断,asp.net,sitemap,runtime-error,Asp.net,Sitemap,Runtime Error,我一直有一些我不完全理解的生产运行时错误。我们在几个不同的ASP.NET4.0网站上都遇到过这种情况(令人不寒而栗-是的,我知道-我们正在将其移植到MVC,但这需要一些时间) 首先,我们从未能够在开发/质量保证环境中重现这个问题。第二,部署后,这个问题似乎不存在。有时,问题会在部署后一两天内显现,而其他时间,部署将持续一个月而根本不会显现。但是,一旦它显示出来,那么在网站下查看的任何页面都会导致错误。最后,这个问题似乎只有在我们迁移到.NET4.0之后才会出现。我们从2.0开始,一年前升级到了3
找不到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>
我已经在所有的站点地图中确认,有一个节点的url=“~/Default.aspx”和roles=“*”(其中包括公共/匿名访问),因此我很困惑为什么会出现这个问题
我考虑过的问题是:
有人能解释一下吗?动态编译的站点地图似乎已损坏或出现其他问题。我找到的唯一解决方案是
IISRESET
或同等解决方案。即使到那时,也不知道这个问题能解决多久。这太令人沮丧了 嗯。我已经有好几年没有使用ASP.net了,但是如果我记得的话,我有一个类似的问题,我用ASP.net解决了
Page.ResolveURL("~SomePage.aspx");
在运行时,站点地图url被解析为实际url,因此tilde被删除并替换为实际url(我认为:) 对于这个问题,我有两种可能的想法。两者都不能保证有效。;-)
<location path="bobsSecret.aspx">
<system.webServer>
<security>
<authorization>
<remove users="" roles="BobAndFriends" verbs="" />
<add accessType="Allow" users="Bob" />
</authorization>
</security>
</system.webServer>
</location>
我之所以提到这一点,是因为我在过去的尝试中遇到了一些麻烦
要使我的站点地图XML文件中的角色属性正常工作
使用我在web.config中的URL授权中应用的设置
我唯一能想象的就是某种比赛状态
负责执行这些政策的流程是
之前在一个位置(web.config)读取一个安全设置
在另一个地方阅读(web.sitemap)
只是在黑暗中摸索,基于我过去的一些问题
有 经验
作为第二个选项,您可以考虑将此配置放入 您的aspx页面,而不是在代码隐藏的页面加载事件中。 你可以试试这个:
<asp:SiteMapDataSource
id="SiteMapDataSource1"
runat="server"
StartingNodeUrl="~/Default.aspx">
</asp:SiteMapDataSource>
这样,您的StartingNodeUrl就在ASPX页面本身中指定了,如果这确实是框架代码中的一个间歇性错误,那么这个小小的更改可能会解决这个问题
我在这个帖子上写了一篇被删除的帖子:(无论如何,我“有”同样的问题 我发现无论我做什么,都会出现“找不到URL为“~/rootnode”的站点地图节点”的情况。当我决定删除文件系统依赖项并从恶意代码切换到
SqlSiteMapProvider
时,我的中断出现了。我发现重新创建此问题更可靠
简而言之,您收到该消息是因为没有站点地图!我在站点地图数据源上发现,如果您使用StartingNodeUrl=“~/root.htm”
,则在没有生成站点地图时会出现错误消息。但是如果您使用StartingNodeOffset=“0”
则在未构建站点地图时,不会显示错误消息,也不会呈现菜单
对我来说似乎很奇怪,但我追溯到XmlSiteMapProvider。有时它构建,有时它没有。我无法完全理解,但它看起来像是异步发生的。无论如何,我已经从wickedcode切换到了SqlSiteMapProvider
除了转换为vb之外,我所做的一个更改是在返回重写的BuildSiteMap
方法时进行递归调用:
' Return the root SiteMapNode
If _Root Is Nothing Then
Return Me.BuildSiteMap
Else
Return _Root
End If
这确保了站点地图的构建。我曾考虑过在其中加入一个无限递归保护,但它似乎不是必需的
我仍然在想,可能是网络延迟或某种身份验证(在我们这里是通过一个广告控制器进行的,并且延迟了早上的第一件事)
<asp:SiteMapDataSource
id="SiteMapDataSource1"
runat="server"
StartingNodeUrl="~/Default.aspx">
</asp:SiteMapDataSource>
' Return the root SiteMapNode
If _Root Is Nothing Then
Return Me.BuildSiteMap
Else
Return _Root
End If