In molti casi, è necessario estendere Umbraco per aggiungergli diversi tipi di funzionalità.
Nell’ultimo progetto, che andrà online tra qualche settimana, abbiamo dovuto creare un sito parallelo che girasse dentro umbraco (quasi come abbiamo fatto con www.style.it). In questo sito, che comunque gira sotto umbraco, abbiamo dovuto utilizzare la sessione per diversi motivi.

Ovviamente, pubblicato sull’ambiente di stage, non funzionava piu nulla. Gli “object reference not set” del log non davano molte informazioni, ma con un pò di magia abbiamo scoperto l’arcano: le sessioni erano tutte misteriosamente a null. Ma non nel senso valore null, nel senso che HttpContext.Current.Session era null. Praticamente non veniva caricato il modulo della Session. L’errore restituito è:

“Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive.”

L’unica differenza tra il nuovo progetto e quello che abbiamo fatto con style era l’utilizzo dei DirectoryUrl, ossia abbiamo levato le estensioni .aspx dai documenti di umbraco. Cercando in giro, abbiamo trovato la soluzione in questo post.

Praticamente, IIS7 ha una sorta di feature (baco?) per cui bisogna specificare nel web.config, nel tag Modules, l’attributo “runAllManagedModulesForAllRequests” e valorizzarlo a true. In questo modo:

<modules runAllManagedModulesForAllRequests="True">

… A me va anche bene, con la modifica tutto funziona.. mah.. mi chiedo perchè “discriminare” alcuni moduli, come quello della session, e altri no… mi sarei aspettato un sito totalmente non funzionante, non tutto funzionante tranne le Session! Anche perchè questo genere di problemi, se non si dispone di un IIS7 su cui fare debug (es: lo sviluppatore che ha XP o Vista sul suo PC, e pubblica su uno shared host), possono portare a un sacco di problemi!

Technorati Tags: ,,