У меня были некоторые производственные ошибки времени выполнения, которые я не до конца понимаю. Это случилось с нами на нескольких разных веб-сайтах ASP.NET 4.0 ( вздрагивает - да, я знаю - мы переносим это в MVC, но это занимает некоторое время).
Прежде всего, нам никогда не удавалось воспроизвести эту проблему в средах разработки / контроля качества. Во-вторых, после развертывания проблема, по-видимому, отсутствует. Иногда проблема проявляется в течение одного или двух дней после развертывания, а в другое время развертывание будет действовать в течение месяца без его проявления. Однако, как только это проявляется, то любая страница, просматриваемая под веб-сайтом, вызывает ошибку. Наконец, эта проблема, похоже, возникла только после того, как мы перешли на .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, что есть узел с url = "~ / Default.aspx" с role = "*" (который включает публичный / анонимный доступ), поэтому я очень запутался, почему это проблема возникает.
Проблемы, которые я рассмотрел:
- SiteMap не имеет узла для Default.aspx. Все они делают.
- Узел SiteMap Default.aspx недоступен из соображений безопасности для текущего пользователя / роли. Все они доступны для анонимных пользователей, и эта проблема существует даже для супер администраторов.
- Переданный URL-адрес содержит строки запроса (Default.aspx? Abcd). Я не знаю, если это проблема (я уверен, что надеюсь, что нет), но как только проблема проявляется, я могу написать URL без строк запроса, и проблема все еще существует.
- Изменения SiteMap. Это не
- Права доступа к файлу карты сайта. Карта сайта прекрасно работает после развертывания, поэтому, если разрешения не изменены таким образом, как это исправляет IISRESET, это не проблема.
- Рабочий процесс становится глобально поврежденным. Я так не думаю. У нас ~ 12 веб-сайтов в одном пуле приложений, и проблема всегда ограничивается одним веб-сайтом. Кроме того, нам еще предстоит сделать так, чтобы это происходило с более чем одним веб-сайтом за раз, хотя пока оно проявилось в 4 разных сайтах.
Кто-нибудь может пролить свет на это? Кажется, что динамически скомпилированный SiteMap поврежден или что-то в этом роде. Единственное разрешение, которое я нашел, - IISRESET
или эквивалентное. И даже в этом случае невозможно сказать, как долго проблема будет решена. Это ОЧЕНЬ расстраивает!