App_Offline.htm e la sua quasi inutilità

Una delle nuove feature di asp.net 2.0 aggiunta all'ultimo minuto è la famigerata pagina App_Offline.htm che se inserita nella root dell'applicazione fa lo shutdown dell'Appdomain e diventa l'unica pagina vista da chiunque tenti di connettersi.

All'inizio ho pensato che questa feature fosse interessante ed utile, ma proprio ieri quando mi accingevo ad utilizzrala mi sono reso conto della sua quasi totale inutilità. Da un punto di vista è molto comodo poter spostare in produzione gli aggiornamenti senza che alcun utente sia connesso, ma finita questa operazione, che in genere dura pochi secondi o minuti in caso di situazioni più complesse, c'è bisogno di fare un giro di test per controllare il corretto funzionamento di tutto.

Purtroppo questa fase non è attuabile perchè come si prova ad accedere all'applicazione si viene reindirizzati alla pagina di Offline. Se però si elimina la pagina, tutti gli utenti possono entrare e addio test finali. Visto che i test finali in genere prendono diverso tempo, sicuramente molto più del semplice aggiornamento dei file, direi che questa feature è molto monca e poco utile.

Partendo dall'idea di voler comunque mettere l'applicazione offline in maniera gradevole per l'utente, ecco che si arriva alla naturale conclusione che un HttpModule è quello che ci vuole. Si crea una sezione personalizzata nel web.config che serve a specificare se l'applicazione è offline. Nell'HttpModule si gestisce l'evento AuthorizeRequest e se l'utente è autenticato ed è amministratore allora viene autorizzato ad entrare, altrimenti viene rimandato al login. Una volta effettuato il login, se l'utente è amministratore allora viene autorizzato ad entrare, altrimenti viene rimandato alla pagina di offline.

Il tutto è quasi pronto, mancano gi ultimi ritocchi al codice ed il gioco è fatto, aspettatevi novità nel Lab :)

Stay Tuned...

Nella stessa categoria

Commenti
matro scrive:
App_Offline.htm e la sua quasi inutilità

sono d'accordo con Stefano: così come l'hanno implementata, App_Offline.htm è poco utile:

per i deploy dei siti solitamente cambio porta e sulla 80 metto un sito composto di una sola pagina, index.html, con tutti i permessi - compreso Read - non attivi sulle proprietà del sito web e redirect su index.html per l'errore "403 access denied". poi a questa unica pagina abilito il permesso Read.
01/01/2007 ore 11.27
Daniele Bochicchio scrive:
Re:_App_Offline.htm_e_la_sua_quasi_inutilità

beh, app_offline serve unicamente ad evitare che arrivino chiamate ad ASP.NET, è utile quando per esempio devi mettere su tanti assembly o file di sistema e non vuoi che gli utenti ricevino errori.
per il resto, sono d'accordo con te
27/12/2006 ore 12.49
novecento scrive:
App_Offline.htm e la sua quasi inutilità

Anch'io ho un po' sopravvalutato App_Offline, penso comunque che sia una buona funzionalità "già pronta" per l'uso nello sviluppo e manutenzione di semplici siti web che non dovrebbero avere nemmeno una fase di test.

Anch'io inizialmente pensavo di utilizzarlo come hai fatto tu: bloccare, aggiornare, testare.. sì.. ma come testo se non posso accedere?  ed allora mi permetto di evidenziare due strade , la "già pronta" soluzione di asp.net se internamente sono configurati i ruoli standard:

<authorization>
<allow roles="Admins"/>
<deny users="?"/>
</authorization>

oppure la tua idea se si vuole fare qualcosa di più elegante e flessibile e configurabile senza modificare web.config, ma sopratutto se si una propria implementazione di "policy di autorizzazione":


public void Init(HttpApplication _HttpApplication)
{
_HttpApplication.AuthenticateRequest += new EventHandler(this.Application_AuthenticateRequest);
_HttpApplication.AuthorizeRequest += new EventHandler(this.Application_AuthorizeRequest);
}

private void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpApplication _HttpApplication = (HttpApplication)sender;

if (_HttpApplication.Request.IsAuthenticated)
{
RoleEntity.LoadUserRoleEntities();
}
}

public void Application_AuthorizeRequest(Object source, EventArgs e)
{

}


aspetto di vedere la tua implementazione!
buone feste
23/12/2006 ore 10.49

Per inserire un commento, devi registrarti alla nostra community.

© 1998-2008 - SMWorld.NET - Il blog di Stefano Mostarda

TagCloud
BLOG INFO
  • Post: 118
  • Commenti: 66
  • TrackBacks: 19
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom OPML

MVP
CATEGORIE
I PIÙ LETTI DEL MESE
IN EVIDENZA