6

Jun

Windows Azure Lab – Debugging & Logging a Cloud Application

Ora vediamo come impostare una semplice strategia di debugging e logging per una applicazione ASP.NET MVC che dovrà girare su Windows Azure. L’esempio è costruito sul progetto FabrikamInsurance del training kit ufficiale, anche se basta un progetto MVC semi-vuoto per poter replicare i passaggi.

Partendo da un progetto web pre-esistente, per il “porting” a Azure, dovremmo intanto creare un Cloud Project contenitore:

0e54b55c-5590-479f-b08b-5c3e6f32d98e

Aggiungiamo il progetto Web alla soluzione e a quel punto nel Solution Explorer, sotto i Ruoli del progetto, dovremo aggiungere il progetto web come Web Role Project in Solution.

5d1562a7-53dc-4d42-ab68-178e7ed427ee

Nota: creando un progetto Web direttamente dal Wizard di creazione di un Cloud Project, esso sarà creato seguendo la logica di Azure e quindi il Web Role sarà già conforme al Cloud. In questo caso invece, bisogna effettuare qualche ritocco sul progetto, come ad esempio i riferimenti alle librerie utilizzate per accedere all’Environment di Azure, allo storage, etc..

12af888b-e222-440c-8973-73efc254d200

Questi passaggi già sarebbero sufficenti per fare eseguire meramente l’applicazione su Azure. Tuttavia è necessario un minimo di sforzo per interfacciarsi al Cloud, in particolare per potersi “agganciare” al RoleEntryPoint del ruolo. Deve essere perciò sviluppato un file WebRole.cs/vb o analoghi che erediti da RoleEntryPoint e che sia più o meno così (il codice nel Changing blocca il restart se la modifica applicata è relativa al solo tracing):

image

A questo punto possiamo simulare qualche errore nel nostro applicativo, per esempio una divisione per 0. Poniamo in un qualsiasi metodo di backend questa operazione e eseguiamo una pagina che richiami tale logica:

e8ba4a0f-a5e0-4b3c-a740-cbfc00393ec5

Ora si renderebbe necessario un wrapper che, utilizzando gli strumenti standard di ASP.NET, come il tracer, ridiriga tutto l’output su Azure stesso e, per esempio, sull’Azure Table Storage. Questo genere di libreria è già presente nel training kit ufficiale ed è locata in: WindowsAzureDebugging\Source\Assets\CS.

Importata quindi la libreria compilata o i sorgenti corrispondenti, possiamo utilizzare la clase AzureDiagnostics.TableStorageTraceListener come provider di logging, registrandolo nell’Application_Start della nostra applicazione MVC:

image

dove il metodo che configura il trace listener sarà:

image

Esiste tuttavia un altro metodo per configurare il Trace Listener via configurazione:

image

 

Configuration Settings

Siamo abituati ad utilizzare il Web.config per salvare i settings di una nostra applicazione. Tuttavia, in Azure, il Web.config non è più accessibile/modificabile dopo il deploy, se non con un rideploy del package Cloud. Per cui le configurazioni devono essere inserite nel ServiceConfiguration (cscfg) che tramite il RoleEnviroment passerà i dati all’applicazione host. Questa efficace architettura spiega anche perchè, nell’esempio precedente abbiamo utilizzato questa riga di condice per prelevare un setting dalla configurazione:

image

Per non causare una eccezione, questa setting va inserita nel cscfg o a mano, o tramite la finestra di inserimento delle Role Properties:

54c448cb-7c90-4d4a-8601-99a55f3cdeb2

Infine, dopo la configurazione completa, basterà usare il Trace al solito, per esempio nell’Application_Error:

image

Per visualizzare il Log occorre avere uno strumento per sfogliare l’Azure Storage (come l’Az. St. Studio) oppure scriversi un client ad-hoc.

by Roberto Freato on 6/6/2011
Post archive