I file di configurazione
ASP.NET facilita il rilascio delle applicazioni grazie alla presenza dei file di configurazione a livello macchina ed applicativo. Viene inoltre ridefinito e potenziato il ruolo di global.asa
Chi di voi ha realizzato in passato vere e proprie applicazioni con Asp, si è certamente scontrato con la difficoltà di prendere il progetto sviluppato in locale e portarlo in produzione. Le differenze di configurazione tra i server (in particolareIIS) dà a volte risultati imprevisti, che magari si manifestano quando il sito è già stato avviato.
ASP.NET risolve questa problematica gestendo le configurazioni dei server e degli applicativi utilizzando due file in formatoXML:
- web.config - può essere utilizzato per ogni applicazione e definisce la configurazione e le politiche di sicurezza delle pagine componenti l’applicazione
- machine.config - è un unico file che contiene la configurazione comune a tutto il server
Con ASP.NET viene anche ridiscusso il ruolo di Global.asa (Global.asax da questa versione), che non si occupa più di contenere informazioni sulla configurazione dell’applicazione, ma contiene piuttosto parti di codice comune.
Web.config
Web.config facilita la sincronizzazione tra ambiente di prova e ambiente di produzione. Può contenere:
- variabili comuni a tutte le applicazioni
- configurazioni per le sessioni
- opzioni per la gestione degli errori
- informazioni per la sicurezza
Vediamo la configurazione in azione con un semplice esempio: il reindirizzamento ad una pagina in caso di errore.
Abbiamo creato una semplice pagina che genera un errore (è dichiarato unDataSet ma non sono importati inamespace di ADO.NET).
Il semplice file di configurazione, che ospitiamo nella stessa cartella della pagina, ha una forma del tipo:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ConnectionString" value="Provider=SQLOLEDB.1;data source=antoniov;initial catalog=Biblioteca;uid=anon;pwd=;" />
</appSettings>
<system.web>
<customErrors mode="On" defaultRedirect="errorpage.aspx" />
<sessionState mode="Off" />
</system.web>
</configuration>
Nell’esempio sono presenti due elementi di interesse:
- è aggiunta una chiave che permette di centralizzare l’uso della stringa di connessione utilizzata per connettersi ad un database
- il tag customErrors definisce la pagina da richiamare in caso di errore
Per accedere alla chiave da una pagina aspx è sufficiente utilizzare una sintassi del tipo ConfigurationSettings.AppSettings(”ConnectionString”)
Global.asax
Abbiamo detto che il file global.asax da questa versione non ospiterà più elementi di configurazione: questa eredità viene presa da web.config.
Global.asax è ora un “contenitore” di codice comune ad un’applicazione web. Viene impiegato tra l’altro per:
- importare dei namespace a livello di applicazione per non doverli dichiarare in ogni pagina
- eseguire operazioni all’avvio e al termine delle sessioni e dell’applicazione (come già accadeva in parte con Asp)
- eseguire del codice al verificarsi di una condizione di errore
Nel prossimo esempio vediamo proprio come è possibile gestire una condizione di errore salvando un log nel registro degli eventi.
La struttura di global.asax è la seguente:
<%@ Import Namespace="System.Diagnostics" %>
<script language="VB" runat="server">
Sub Application_Error(objSender as Object, objArgs as EventArgs)
Dim strLogName As String = "Errori Web"
Dim strMessage As String = "URL " & Request.Path & " Errore: " & Server.GetLastError.ToString
If (Not EventLog.SourceExists(strLogName)) Then
EventLog.CreateEventSource(strLogName, strLogName)
End if
Dim ELLog as New EventLog
ELLog.Source = strLogName
ELLog.WriteEntry(strMessage, EventLogEntryType.Error)
End Sub
</script>
Al verificarsi di un errore (se questo non viene già intercettato dal codice presente nella pagina), viene scatenato l’evento Application_Error. A questo punto viene verificata la presenza di unlog “Errori Web” che viene eventualmente creato e popolato con la descrizione dell’errore verificatosi.