Ho riscontrato degli errori di runtime di produzione che non comprendo completamente. Questo è successo a noi su un paio di siti Web ASP.NET 4.0 diversi (shudders - sì, lo so - lo stiamo trasferendo su MVC ma ci vorrà del tempo).Sitemap si spezza in modo casuale nel tempo
Prima di tutto, non siamo mai stati in grado di riprodurre questo problema negli ambienti di sviluppo/QA. In secondo luogo, al momento dell'implementazione, il problema sembra essere inesistente. A volte il problema si manifesta entro un giorno o due dalla distribuzione e altre volte la distribuzione sarà disponibile per un mese senza che si verifichi del tutto. Tuttavia, una volta che si manifesta, QUALSIASI pagina visualizzata sotto il sito web causa l'errore. Infine, questo problema sembrava emergere solo una volta migrata su .NET 4.0. Abbiamo iniziato a 2.0, un anno fa aumentato a 3,5, e recentemente aumentato a 4,0 con questa soluzione e la maggior parte dei progetti figlio.
L'errore: Could not find the sitemap node with URL '~/Default.aspx'.
Una versione semplificata della nostra mappa del sito (con alcuni nomi cambiati e nodi poco interessanti rimossi) è la seguente:
<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>
Si è registrato nel nostro 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>
E dai registri ho ristretto in basso che cosa causa l'errore in una classe base che praticamente tutto il nostro p età derivano da:
private void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
SiteMapDataSource.StartingNodeUrl = "~/Default.aspx";
}
}
mi hanno confermato in tutte le SiteMaps che c'è un nodo con url = "~/Default.aspx" con ruoli = "*" (che comprende l'accesso del pubblico/anonimo), in modo da Sono molto confuso sul motivo per cui questo problema si verifica.
I problemi che hanno preso in considerazione:
- Mappa del sito non ha un nodo per Default.aspx. Tutti loro lo fanno.
- Il nodo Default.aspx di SiteMap non è accessibile per motivi di sicurezza all'utente/ruolo corrente. Sono tutti accessibili agli utenti anonimi e questo problema esiste anche per gli utenti super amministratori.
- L'URL inserito contiene querystrings (Default.aspx? Abcd). Non so se questo è un problema (sicuramente spero di no) ma una volta che il problema si manifesta, posso scrivere a mano l'URL senza querystring e il problema esiste ancora.
- Modifiche alla mappa del sito. Non
- Autorizzazioni del servizio al file Sitemap. La mappa del sito funziona perfettamente dopo una distribuzione, quindi, a meno che le autorizzazioni non vengano modificate in un modo che IISRESET corregge, non si tratta di un problema.
- Il processo di lavoro diventa globalmente corrotto. Io non la penso così. Abbiamo circa 12 siti Web tutti nello stesso pool di app e il problema rimane sempre confinato all'interno di un singolo sito web. Inoltre, dobbiamo ancora farlo accadere a più di un singolo sito Web alla volta, sebbene finora si sia manifestato in 4 diversi.
Qualcuno può far luce su questo? Sembra quasi che la SiteMap compilata dinamicamente venga danneggiata o qualcosa del genere. L'unica risoluzione che ho trovato è un IISRESET
o equivalente. E anche allora, non si sa quanto a lungo il problema verrà risolto. Questo è MOLTO frustrante!
Su quale server è ospitato? –
Win 2003 R2 Standard – Jaxidian
Abbiamo ancora questo problema e mi piacerebbe avere ancora una risposta per questo ... – Jaxidian