5

tl; dr:Menu da MvcSiteMapProvider a volte non riesce a rendere se stesso dopo una richiesta torna in linea, anche se le piste di codice e il menu rende dopo un refresh della pagina.MvcSiteMapProvider non è pronto per il rendering di pagine, problema di cache?

Sto usando il MvcSiteMapProvider in un progetto ASP.NET MVC 3, e, occasionalmente, dopo il passaggio l'applicazione da offline a online (con l'inserimento di un un file App_Offline.htm nella root del server e la rimozione) del menu non renderà nulla fino a quando la pagina non viene aggiornata.

Sto utilizzando un DynamicNodeProvider personalizzato per interrogare le voci di menu da un database e quindi eseguire il rendering del menu. Durante il debug, posso vedere che questo codice è effettivamente in esecuzione prima che la pagina venga caricata, ma nessun menu viene visualizzato sulla pagina. Ho impostato la cache su diverse ore e sto utilizzando una chiave cache personalizzata per consentire l'invalidazione dopo determinate azioni.

Purtroppo non riesco a riprodurre questo errore in modo coerente. I può può comunque riprodurre più frequentemente se aggiungo un sonno nella parte superiore del DynamicNodeProvider - non riuscirà circa il 60-70% del tempo con un ritardo di 30+ secondi. La mia ipotesi migliore è che abbia a che fare con il meccanismo di memorizzazione nella cache perché impostare la durata della cache su 0 sembra in modo che non ci siano problemi e il menu si apre sempre. Tuttavia, è difficile dirlo con certezza, poiché il problema è difficile da definire. Lasciandolo a 0 non sarebbe una soluzione accettabile a causa della resistenza alle prestazioni.

Quale potrebbe essere la causa principale di questo problema? Qualcuno ha visto questo comportamento prima o ha una soluzione alternativa?

risposta

2

MvcSiteMapProvider viene morso dal modello di threading di ASP.NET SiteMapProvider di volta in volta, soprattutto quando si hanno definizioni di sitemap più grandi. Al momento non esiste alcuna soluzione alternativa per questo comportamento, ma sto pianificando di eseguire una riscrittura (e abbandonando la dipendenza di ASP.NET SiteMapProvider) per renderlo più stabile in condizioni difficili.

+0

Non vedo l'ora di riscriverlo! – Joshua

+0

Sto pianificando di iniziarlo all'inizio del 2013. E per ora, sto bestemmiando che non ho preso il percorso di "fuggi la biblioteca sottostante". – maartenba

+0

è legato al problema che a volte il menu rende i nodi sbagliati? – 360Airwalk

Problemi correlati