Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 站点地图随时间随机中断_Asp.net_Sitemap_Runtime Error - Fatal编程技术网

Asp.net 站点地图随时间随机中断

Asp.net 站点地图随时间随机中断,asp.net,sitemap,runtime-error,Asp.net,Sitemap,Runtime Error,我一直有一些我不完全理解的生产运行时错误。我们在几个不同的ASP.NET4.0网站上都遇到过这种情况(令人不寒而栗-是的,我知道-我们正在将其移植到MVC,但这需要一些时间) 首先,我们从未能够在开发/质量保证环境中重现这个问题。第二,部署后,这个问题似乎不存在。有时,问题会在部署后一两天内显现,而其他时间,部署将持续一个月而根本不会显现。但是,一旦它显示出来,那么在网站下查看的任何页面都会导致错误。最后,这个问题似乎只有在我们迁移到.NET4.0之后才会出现。我们从2.0开始,一年前升级到了3

我一直有一些我不完全理解的生产运行时错误。我们在几个不同的ASP.NET4.0网站上都遇到过这种情况(令人不寒而栗-是的,我知道-我们正在将其移植到MVC,但这需要一些时间)

首先,我们从未能够在开发/质量保证环境中重现这个问题。第二,部署后,这个问题似乎不存在。有时,问题会在部署后一两天内显现,而其他时间,部署将持续一个月而根本不会显现。但是,一旦它显示出来,那么在网站下查看的任何页面都会导致错误。最后,这个问题似乎只有在我们迁移到.NET4.0之后才会出现。我们从2.0开始,一年前升级到了3.5,最近通过这个解决方案和大多数子项目升级到了4.0

错误:
找不到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=“*”(其中包括公共/匿名访问),因此我很困惑为什么会出现这个问题

我考虑过的问题是:

  • 站点地图没有Default.aspx的节点他们都这样。
  • 出于安全原因,当前用户/角色无法访问SiteMap的Default.aspx节点匿名用户都可以访问它们,超级管理员用户甚至存在此问题。
  • 传入的URL包含查询字符串(默认为.aspx?abcd)我不知道这是否是一个问题(我当然希望不是),但一旦问题显现出来,我就可以手写URL,不带任何查询字符串,问题仍然存在。
  • 站点地图更改它没有
  • 服务对站点地图文件的权限站点地图在部署后可以正常工作,因此,除非以IISRESET修复的方式更改权限,否则这不是问题。
  • 工作进程将全局损坏<我不这么认为。我们有12个网站都在同一个应用程序池中,问题总是局限在一个网站内。此外,我们还没有在一个以上的网站上同时出现这种情况,尽管到目前为止它已经在4个不同的网站上出现过。

  • 有人能解释一下吗?动态编译的站点地图似乎已损坏或出现其他问题。我找到的唯一解决方案是
    IISRESET
    或同等解决方案。即使到那时,也不知道这个问题能解决多久。这太令人沮丧了

    嗯。我已经有好几年没有使用ASP.net了,但是如果我记得的话,我有一个类似的问题,我用ASP.net解决了

    Page.ResolveURL("~SomePage.aspx");
    

    在运行时,站点地图url被解析为实际url,因此tilde被删除并替换为实际url(我认为:)

    对于这个问题,我有两种可能的想法。两者都不能保证有效。;-)

  • 您是否同时也在使用URL授权 位于不同文件夹中的某些web.config文件中的时间 在整个web应用程序中

    示例URL授权设置可以在一个 web.config文件:

    <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