Sitemap Randomly Breaks Over Time / Could Not Find The Sitemap Node With URL '~/Default.aspx'
Aug 2, 2010
I've been having some production runtime errors that I don't fully understand. This has happened to us on a couple different ASP.NET 4.0 Web Sites (shudders - yes, I know - we're porting it to MVC but that's taking some time).
First of all, we have never been able to reproduce this issue in development/QA environments. Secondly, upon deployment, the issue seems to be non-existent. Sometimes the issue manifests within a day or two of deployment and other times the deployment will be live for a month without it manifesting at all. However, once it manifests, then ANY page viewed under the web site causes the error. Lastly, this problem seemed to only come up once we migrated to .NET 4.0. We started at 2.0, a year ago upped to 3.5, and recently upped to 4.0 with this solution and most child projects.
The error:
Could not find the sitemap node with URL '~/Default.aspx'.
A simplified version of our sitemap (with some names changed and uninteresting nodes removed) is as follows:
I have confirmed in all of the SiteMaps that there is a node with url="~/Default.aspx" with roles="*" (which includes public/anonymous access), so I am very confused as to why this problem occurs.
SiteMap does not have a node for Default.aspx. All of them do. SiteMap's Default.aspx node is not accessible for security reasons to the current user/role. They're all accessible to anonymous users and this problem even exists for super admin users. Passed-in URL contains querystrings (Default.aspx?abcd). I don't know if this is a problem (I sure would hope not) but once the problem manifests itself, I can handwrite the URL with no querystrings and the problem still exists.
SiteMap changes. It doesn't Service's permissions to the sitemap file. The sitemap works perfectly fine after a deployment, so unless permissions are changed in a way that IISRESET fixes, then this is not an issue. The worker process becomes globally corrupt. I don't think so. We have ~12 web sites all in the same app pool and the problem always stays confined within a single web site. Also, we have yet to have this happen to more than a single web site at a time although it has manifested itself in 4 different ones so far.
I have a second level node that goes onto two lines. The first line indents 15px as is set by the class for node level 2. The seond line kicks back to the same level as 1st level nodes. Here's what I mean:
On our site, we have our sitemap in this order:SiteName > SelectedProject > Path > To > PageWhere SiteName takes you to the very root page which is primarily to select a project and SelectedProject takes you to the project's homepage.Currently, in the Web.sitemap file, SelectedProject has a static name. How can I rename it to the name of the selected project, which can be obtained from Session("PRJ")?
We are getting this error message when we try to click the link in the menu to go to Report Server:
Source Error: Line 31: <siteMapNode title="Reports" description="Reports"> Line 32: Line 33: <siteMapNode url="https://ffxsqldgc01.ffx.co.fairfax.va.us/Reports/Pages/Folder.aspx?ItemPath=%2fDPZ&ViewMode=List" title="View Reports" description="Click here to view the reports" /> Line 34: </siteMapNode> Line 35:
I tried to add after the &, as it was suggested on one of the forum but it did not work. Any other ideas.
However, now I want to be able to create multiple web.sitemap files, and then programmatically determine which web.sitemap file to use, but I can't seem to find out how to do this. I'm assuming I could either create one custom SiteMapProvider that can perform the logic to determine which web.sitemap file to load, or I have multiple providers, each one with the SiteMapFile property set to a specific *.sitemap file, and then switch providers programmatically before I access SiteMap.RootNode.
I create a site map for my site but it only works three levels deep and I need at least six. How can I do that? Every time I add a child node under "Water Filters, Desalinators or Micropur" the sitemap doesn't show the child node. Until now my sitemap only works three levels deep: Home > Products > Water Filters But I need this: Home > Products > Water Filters > Katadyn > Personal Use > Pocket Turbo 1. This is my sitemap configuration:
I am creating a CacheDependency on the file that my SiteMap provider uses. I would like to get the name of the file from my sitemap provider instead of hard coding it. Is there a way?
Edit
Duh, I forgot to mention: XmlSiteMapProvider that comes with ASP.NET
Edit 2
Reflector shows a private member field called _filename that isn't exposed in any way as far as I can tell.
How would I programatically reference a .sitemap file that is not the root web.sitemap file? I have a file called research.sitemap in a folder a level under root. I want to refernce this file in my code behind like his: SiteMapNode m1 = SiteMap.RootNode (but since this isnt web.sitemap in the root, I dont know how to get access to it).
I have two Master Pages, each with a SiteMapPath control that uses a separate sitemap assigned in markup via the SiteMapFile attribute. Both sitemap files are defined as providers in web.config, and sitemap "A" is set as default. My master pages are dynamically assigned to common content pages (in the Page_PreInit event).
I've added a subarea to my sitemap in CRM 4.0, and for absolute URLs it works as expected. However, for relative URLs it does not. The page in question is internal and is accessed through:
I was referred here by MSDN forums hope this is the right place - I have a custom control (:WebControl) that renders web.sitemap in a specific way. While it runs error free and produces the expected result, at Design-Time it complains
[Code]....
and have tried the SiteMapDataProvider Tag with and without the SiteMapProvider attribute.Does anybody have (a) any experience with this, or (b) any suggestions as to how to track down the problem?
So, in our website we are using SiteMap. For each request we render some menu and to do that we do SiteMap.RootNode in the helper function.
Now, when I have done the profiling of my website using dotTrace, I saw the get_RootNode() is taking lot's of time(around 70-75 millisecond). But we know that the SiteMap is static. So, I am thinking in somehow I will get the SiteMap.RootNode only once in Application_Start and will access that through out each request.
So, my questions are,
Is my approach correct?
How should I do that?
Or is there any efficient way that I can use SiteMap.RootNode
I have a website, on the root i have web.sitemap that works fine for the web users, i have an admin area that is in a sub folder, ths second we.sitemap is on this sub folder how can i call this one ?
I want to add a site map to my website however I am a little unsure as to its contents.
Basically I have a simple site with only 5 pages, the site uses a navigation bar which is generated from a master page and is therefore visible on every page.
This means every page is navigatable from very page. In addition some pages also link to the other pages through key words in the text.
I have a Sitemap and I am planning to query it programmatically and filter it, something likefrom SiteMapNode smnode in SiteMap.RootNode.GetAllNodes() ..do somethingMy question is how do I approach the above. I mean on what event can I query it and how to then bind it to the TreeView?
i created a web.sitemap file where I have listed the following:
[Code]....
I need to set some values before the menu item navigates to the page. I'd like to use the same aspx page for more than one menu item and I'd like to avoid the use of querystrings in my code. However, I realize that it's not possible to set the same url in the web.sitemap file. If I don't specify a url, the menu item created is not click-able.