У меня были некоторые ошибки производительности, которые я не совсем понимаю. Это произошло с нами на нескольких разных сайтах ASP.NET 4.0 (дрожь - да, я знаю - мы переносим его в MVC, но это занимает некоторое время).
Прежде всего, мы никогда не смогли воспроизвести эту проблему в средах разработки /QA. Во-вторых, после развертывания проблема, похоже, отсутствует. Иногда проблема проявляется в течение дня или двух из развертывания, и в другое время развертывание будет жить в течение месяца без его проявления вообще. Однако, как только это проявится, тогда ЛЮБАЯ страница, просматриваемая под веб-сайтом, вызывает ошибку. Наконец, эта проблема, похоже, появилась только после перехода на .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>
И из журналов я сузил то, что вызывает ошибку в базовом классе, из которого почти все наши страницы вытекают из:
private void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
SiteMapDataSource.StartingNodeUrl = "~/Default.aspx";
}
}
Я подтвердил на всех SiteMaps, что существует node с url = "~/Default.aspx" с role = "*" (который включает общедоступный/анонимный доступ), поэтому я очень смущен в отношении почему эта проблема возникает.
Проблемы, которые я рассмотрел:
- SiteMap не имеет node для Default.aspx. Все они делают.
- SiteMap Default.aspx node недоступен по соображениям безопасности для текущего пользователя/роли. Все они доступны анонимным пользователям, и эта проблема существует даже для пользователей супер администратора.
- Введенный URL содержит запросы (Default.aspx? abcd). Я не знаю, если это проблема (я уверен, надеюсь, что нет), но как только проблема проявится, я могу отписать URL без каких-либо запросов и проблема все еще существует.
- Изменяется SiteMap. Это не
- Разрешения на работу с файлом Sitemap. Карта сайта отлично работает после развертывания, поэтому, если разрешения не изменены так, как это исправлено IISRESET, это не проблема.
- Рабочий процесс становится глобально коррумпированным. Я так не думаю. У нас есть ~ 12 веб-сайтов в одном и том же пуле приложений, и проблема всегда остается на одном веб-сайте. Кроме того, нам еще предстоит сделать это более чем с одним веб-сайтом за один раз, хотя пока оно проявилось в 4 разных.
Может ли кто-нибудь пролить свет на это? Кажется, что динамически скомпилированный SiteMap поврежден или что-то в этом роде. Единственное разрешение, которое я нашел, это IISRESET
или эквивалент. И даже тогда, не сообщая, как долго проблема будет решена. Это ОЧЕНЬ расстраивает!