ASP.NET 2.0 dispone di un sistema semplice ed integrato per monitorare la salute delle nostre applicazioni, fornendoci dettagliate informazioni a run-time.
Durante L'esecuzione dell'applicazione, il runtime ASP.NET e i controlli generano alcuni eventi che prendono il nome di WebEvent. Ad esempio, utilizzando il sistema di Membership, verranno generati Web Event distinti, dipendenti dall'esito del login. Gli eventi vengono elaborati da classi chiamate Provider, responsabili di recuperare e memorizzazione le informazioni trasportate dal Web Event.
Estendendo questo sistema, è possibile tenere traccia di ogni aspetto della nostra applicazione, ad esempio potremo monitorare operazioni "sensibili", come il cambio della password da parte di un utente.
Creiamo una classe che erediti da WebAuditEvent e la compiliamo nell'assembly MyWebEvent.dll:
public class ChangePasswordEvent : WebAuditEvent { public ChangePasswordEvent(string msg, object eventSource, int eventCode): base(msg, eventSource, eventCode) { } public override void FormatCustomEventDetails(WebEventFormatter formatter) { base.FormatCustomEventDetails(formatter); formatter.IndentationLevel += 1; formatter.AppendLine("cambio password"); formatter.IndentationLevel -= 1; } }
Il costruttore accetta tre parametri: una stinga da utilizzare per associare un messaggio all'evento, l'oggetto che genera l'evento e un intero associato al codice dell'evento.
Eseguiamo l'ovverride del metodo FormatCustomEventDetails, per inserire, se necessario, informazioni aggiuntive inerenti l'evento.
Quindi inizializziamo un'istanza di ChangePasswordEvent nell'handler per l'evento generato, al cambio della password, scatenato dal nuovo WebControl ChangedPassword:
protected void MyChangePassword_ChangedPassword(object sender, EventArgs e) { ChangePasswordEvent cp = new ChangePasswordEvent("cambio password", this, WebEventCodes.WebExtendedBase + 1); cp.Raise(); }
Adesso abbiamo l'evento e chi lo genera, l'ultimo passo da compiere è la configurazione dell'applicazione per associare l'evento ad un provider. Per fare questo, aggiungiamo la sezione
<healthMonitoring enabled="true" > <providers> <clear/> <add name="MySqlProvider" type="System.Web.Management.SqlWebEventProvider" connectionStringName="MyConnection" maxEventDetailsLength="10000" buffer="true" bufferMode="MyBufferModes"/> </providers> <rules> <clear/> <add name="ChangePassword Event" eventName="ChangePassword" provider="MySqlProvider" minInterval="00:00:30"/> </rules> <eventMappings> <clear/> <add name="ChangePassword" type="MyWebEvent.ChangePasswordEvent,MyWebEvent"/> </eventMappings> <bufferModes> <clear/> <add name="MyBufferModes" maxBufferSize="10" maxFlushSize="5" urgentFlushThreshold="3" regularFlushInterval="00:05:00" urgentFlushInterval="00:01:00" maxBufferThreads="1"/> </bufferModes> </healthMonitoring>
Nella sezione
Con
Per utilizzare SqlWebEventProvider è necessario configurare SQL Server, operazione che può essere comodamente eseguita tramite il tool aspnet_regsql.exe o sfruttando la classe SqlServices.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.