Procedura dettagliata: integrazione dell'analisi ASP.NET all'analisi System.Diagnostics
Aggiornamento: novembre 2007
In questa procedura dettagliata viene descritto come integrare le tecniche di analisi ASP.NET con quelle System.Diagnostics e come scrivere tutti i messaggi di analisi in un unico output.
È possibile utilizzare la funzione di analisi per tenere traccia del flusso di esecuzione dell'applicazione, per visualizzare dati nei punti critici del ciclo di vita di un Web Form e per scoprire come i Web Form interagiscono con diversi altri componenti dell'applicazione. Tramite l'analisi è possibile esaminare i parametri delle richieste HTTP inoltrate all'applicazione, la quantità di memoria archiviata nello stato di visualizzazione per un particolare Web Form e altre utili informazioni su profilo.
Il meccanismo di analisi di ASP.NET scrive i messaggi che vengono visualizzati nelle pagine Web ASP.NET e nel visualizzatore di analisi di ASP.NET (Trace.axd), mentre la classe Trace viene utilizzata per scrivere i messaggi di analisi nell'output di analisi standard di .NET Framework (in genere una finestra di console). Per semplificare l'analisi della modalità di interazione dei Web Form con gli oggetti business e altri componenti, è possibile integrare l'output di analisi ASP.NET con l'analisi System.Diagnostics per inviare tutti i messaggi di analisi a uno di questi output.
Tra gli scenari comuni di utilizzo dell'analisi ASP.NET e della classe Trace sono incluse le pagine Web che utilizzano oggetti business di livello intermedio per interagire con dati e regole business, nonché le pagine che utilizzano servizi aziendali come transazioni e code. In queste situazioni i componenti business e aziendali svolgono un ruolo essenziale nella corretta esecuzione della pagina ed è pertanto consigliabile controllarne il flusso di esecuzione ai diversi livelli dell'applicazione utilizzando un unico output di analisi.
In questa procedura dettagliata verrà utilizzata la funzione di analisi. Verrà modificata una pagina Web e un oggetto business per scrivere i messaggi di analisi e quindi tutti i messaggi verranno inviati a un unico output di analisi.
Di seguito sono elencate le attività illustrate nella procedura dettagliata:
Creazione di un componente business personalizzato che restituisce i dati a una pagina Web. Il componente legge i dati da un file XML.
Creazione di una pagina Web che fa riferimento all'oggetto business personalizzato come origine dati.
Attivazione dell'analisi per la pagina Web che fa riferimento all'oggetto business.
Scrittura dei messaggi di analisi nella pagina Web che fa riferimento all'oggetto business.
Scrittura dei messaggi Trace in un oggetto business personalizzato.
Configurazione di un'applicazione ASP.NET per scrivere tutti i messaggi di analisi in un unico output.
Lettura dell'output di analisi.
Prerequisiti
Per completare questa procedura dettagliata, è necessario disporre dei seguenti elementi:
- Microsoft .NET Framework e un sito web ASP.NET esistente.
Nota: |
---|
In questa procedura dettagliata non si presuppone che si stia utilizzando una finestra di progettazione, ad esempio lo strumento di sviluppo Web Microsoft Visual Web Developer o Microsoft Visual Studio. |
Creazione di una pagina Web e un oggetto business
In questa procedura dettagliata verrà creata la pagina Web Default.aspx, un oggetto business AuthorClass e il file di dati XML Authors.xml richiesto per successivi passaggi relativi all'analisi.
È possibile copiare e incollare il codice sorgente nei file della directory ASP.NET per creare la pagina Web Default.aspx, un oggetto business AuthorClass e il file Authors.xml.
Per creare la pagina Default.aspx
Aprire un editor di testo, come Blocco note, e creare un nuovo file.
Immettere il codice riportato di seguito nel file.
<%@ Page Language="VB" %> <html> <form > <asp:objectdatasource id="AuthorsObjectDataSource" typename="PubsClasses.AuthorClass" selectmethod="GetAuthors"/> <asp:gridview id="GridView1" datasourceid="AuthorsObjectDataSource" /> </form> </html>
<%@ Page Language="C#" %> <html> <form > <asp:objectdatasource id="AuthorsObjectDataSource" typename="PubsClasses.AuthorClass" selectmethod="GetAuthors"/> <asp:gridview id="GridView1" datasourceid="AuthorsObjectDataSource" /> </form> </html>
Salvare il file nella directory principale dell'applicazione ASP.NET come Default.aspx.
La pagina Default.aspx utilizza un oggetto business denominato AuthorClass per interagire con i dati XML.
Per creare l'oggetto business AuthorClass
Nella directory principale dell'applicazione creare la directory App_Code.
Aprire un editor di testo, come Blocco note, e aprire un nuovo file.
Immettere il codice riportato di seguito nel file.
Imports Microsoft.VisualBasic Imports System Imports System.Web Imports System.Data Namespace PubsClasses Public Class AuthorClass Private dsAuthors As DataSet = _ New System.Data.DataSet("ds1") Private filePath As String = _ HttpContext.Current.Server.MapPath("~/App_Data/authors.xml") Public Sub New() dsAuthors.ReadXml(filePath, Data.XmlReadMode.ReadSchema) End Sub Public Function GetAuthors() As DataSet Return dsAuthors End Function End Class End Namespace
using System; using System.Web; using System.Data; namespace PubsClasses { public class AuthorClass { private DataSet dsAuthors = new DataSet("ds1"); private String filePath = HttpContext.Current.Server.MapPath("~/App_Data/authors.xml"); public AuthorClass() { dsAuthors.ReadXml (filePath, XmlReadMode.ReadSchema); } public DataSet GetAuthors () { return dsAuthors; } } }
Salvare il file come AuthorClass.cs (per C#) o AuthorClass.vb (per Microsoft Visual Basic) nella directory App_Code.
Il file di dati utilizzato da AuthorClass è Authors.xml.
Per attivare l'analisi e visualizzare i messaggi di analisi ASP.NET
Nella directory principale dell'applicazione creare una directory chiamata App_Data.
Aprire un editor di testo, come Blocco note, e aprire un nuovo file.
Immettere i dati XML riportati di seguito nel file.
Il file XML include le informazioni sullo schema che identifica la struttura del database dei dati, compreso il vincolo di chiave primaria per la chiave.
Nota: I componenti business possono utilizzare i dati nel modo che risulta migliore per l'applicazione. Per semplicità, in questa procedura dettagliata viene utilizzato un file XML.
<?xml version="1.0" standalone="yes"?> <dsPubs xmlns="http://www.tempuri.org/dsPubs.xsd"> <xs:schema id="dsPubs" targetNamespace="http://www.tempuri.org/dsPubs.xsd" xmlns:mstns="http://www.tempuri.org/dsPubs.xsd" xmlns="http://www.tempuri.org/dsPubs.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:element name="dsPubs" msdata:IsDataSet="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="authors"> <xs:complexType> <xs:sequence> <xs:element name="au_id" type="xs:string" /> <xs:element name="au_lname" type="xs:string" /> <xs:element name="au_fname" type="xs:string" /> <xs:element name="au_phone" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:unique name="Constraint1" msdata:PrimaryKey="true"> <xs:selector xpath=".//mstns:authors" /> <xs:field xpath="mstns:au_id" /> </xs:unique> </xs:element> </xs:schema> <authors> <au_id>172-32-1176</au_id> <au_lname>White</au_lname> <au_fname>Gerry</au_fname> <au_phone>408 496-7223</au_phone> </authors> <authors> <au_id>213-46-8915</au_id> <au_lname>Green</au_lname> <au_fname>Marjorie</au_fname> <au_phone>415 986-7020</au_phone> </authors> </dsPubs>
Salvare il file come Authors.xml nella directory App_Data, quindi chiuderlo.
Aggiunta di messaggi di analisi a una pagina Web e a un oggetto business
Una volta creata la pagina Default.aspx, il file dei dati Authors.xml e l'oggetto business AuthorClass, è possibile iniziare a utilizzare l'analisi. Prima di aggiungere messaggi di analisi al codice, attivare l'analisi per la pagina Default.aspx.
Per attivare l'analisi e visualizzare i messaggi di analisi ASP.NET
Aprire un editor di testo, come Blocco note, e aprire la pagina Default.aspx.
Aggiungere un attributo Trace alla direttiva @ Page e quindi impostare Trace su true.
La dichiarazione attiva l'analisi ASP.NET per la pagina Web.
Per ulteriori informazioni, vedere Procedura: attivare l'analisi per una pagina ASP.NET.
L'analisi della pagina è ora attivata e quando la pagina viene visualizzata in un browser Web, si osserverà che il controllo GridView è seguito dall'output di analisi. Nella seconda tabella di analisi visualizzata, Informazioni analisi, sono incluse informazioni dettagliate sul percorso di esecuzione per la pagina Web.
Per ulteriori informazioni su come leggere l'output di analisi, vedere l'argomento Lettura delle informazioni di analisi di ASP.NET.
Scrittura di messaggi di analisi
Per meglio comprendere dove hanno luogo alcune azioni fondamentali di ASP.NET, quale l'associazione dati che viene eseguita dal controllo GridView nella pagina Default.aspx, aggiungere messaggi di analisi alla pagina Web e all'oggetto business AuthorClass.
Per scrivere messaggi di analisi da un Web Form
Nella pagina Web Default.aspx immettere il codice riportato di seguito dopo la direttiva @ Page ma prima del tag <html>.
<script > Private Sub Page_Load(sender As Object, e As EventArgs) Trace.WriteLine("ASP.NET TRACE","page_load called.") Trace.WriteLine("ASP.NET TRACE","page_load finished.") End Sub ' Page_Load </script>
<script > private void page_load(object sender, EventArgs e) { Trace.WriteLine("ASP.NET TRACE","page_load called."); Trace.WriteLine("ASP.NET TRACE","page_load finished."); } </script>
Nota: Potrebbe essere necessario includere un attributo di linguaggio nella direttiva @ Page a seconda del linguaggio utilizzato.
I messaggi di analisi vengono scritti nell'output di analisi ASP.NET e, quando la pagina Default.aspx viene nuovamente visualizzata, si noteranno i messaggi di analisi nella sezione Informazioni analisi, tra "Begin Load" ed "End Load". "Begin Load" ed "End Load" sono associati al metodo Page_Load.
A questo punto verranno aggiunti messaggi di analisi all'oggetto business AuthorClass.
Per scrivere messaggi di analisi nell'oggetto business AuthorClass
Immettere il codice riportato di seguito nel costruttore AuthorClass.
System.Diagnostics.Trace.Write("AuthorClass is created.", "AUTHORCLASS TRACE")
System.Diagnostics.Trace.Write("AuthorClass is created.", "AUTHORCLASS TRACE");
Immettere il codice riportato di seguito nel metodo AuthorClass.GetAuthors.
System.Diagnostics.Trace.Write("GetAuthors called.","AUTHORCLASS TRACE")
System.Diagnostics.Trace.Write("GetAuthors called.","AUTHORCLASS TRACE");
Nota: Se si utilizza il metodo TraceContext.Write di ASP.NET, la categoria di analisi viene riportata all'inizio del messaggio di analisi nell'elenco dei parametri del metodo. Se invece si utilizza il metodo Write dell'analisi .NET Framework, il messaggio di analisi viene riportato prima della categoria di analisi.
Se si compila l'oggetto business con l'opzione del compilatore TRACE, i messaggi di analisi vengono scritti nell'output di analisi del sistema e non nella pagina Default.aspx, come accade per i messaggi di analisi ASP.NET. Per verificare questo comportamento, visualizzare la pagina Default.aspx e notare che nella tabella Informazioni analisi vengono riportati solo gli stessi messaggi "ANALISI ASP.NET" osservati in precedenza.
Nella successiva sezione verrà illustrato come configurare l'applicazione Web ASP.NET in modo che venga eseguita automaticamente la compilazione con l'opzione TRACE attivata e tutti i messaggi di analisi vengano inviati alla pagina Web.
Invio di tutto l'output di analisi al Web Form
Se i messaggi Trace contenuti nell'oggetto business AuthorClass vengono inviati nell'output di analisi ASP.NET, è possibile sapere quando la classe AuthorClass viene creata e modificata durante l'elaborazione della richiesta e disporre di una visione globale dell'attività dell'applicazione. Per inviare i messaggi Trace a una pagina Web ASP.NET, è necessario aggiungere un oggetto WebPageTraceListener. È possibile aggiungere il listener di analisi tramite configurazione (metodo consigliato) o a livello di codice. Per ulteriori informazioni sull'aggiunta di un listener di analisi tramite configurazione, vedere Elemento <listeners> per <trace>.
Nella procedura successiva sarà necessario disporre di un file Web.config. Se si dispone già di un file Web.config, saltare la procedura successiva e passare direttamente a quella che segue per aggiungere un oggetto WebPageTraceListener.
Per creare un file Web.config
Aprire un editor di testo, come Blocco note, e creare un nuovo file.
Immettere il testo riportato di seguito nel file.
<!-- Web.Config Configuration File --> <configuration> <system.web> <customErrors mode="Off"/> </system.web> </configuration>
Salvare il file come Web.config nella stessa directory del file Default.aspx.
A questo punto verrà aggiunto un oggetto WebPageTraceListener all'applicazione per inviare i messaggi Trace nell'output di analisi ASP.NET.
Per aggiungere un WebPageTraceListener per l'applicazione tramite configurazione
Aprire il file Web.config dell'applicazione.
Inserire il codice riportato di seguito nel file Web.config dopo la sezione <system.web>.
<system.diagnostics> <trace> <listeners> <add name="WebPageTraceListener" type="System.Web.WebPageTraceListener, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> </listeners> </trace> </system.diagnostics>
Questa sezione di configurazione aggiunge un oggetto WebPageTraceListener all'insieme dei listener di analisi per l'applicazione.
L'aggiunta di un WebPageTraceListener tramite il file di configurazione dell'applicazione è il metodo di aggiunta di un listener di analisi consigliato. È tuttavia possibile aggiungere il listener di analisi anche a livello di codice. Ciò risulta particolarmente utile quando si utilizza una logica di analisi complessa e differenti tipi di listener per l'analisi dell'applicazione e WebPageTraceListener è solo uno dei tanti.
Se si desidera aggiungere un listener di analisi all'applicazione a livello di codice, creare un file Global.asax e aggiungere il listener attenendosi alla seguente procedura.
Per creare un file Global.asax e aggiungere un listener di analisi a livello di codice
Aprire un editor di testo, come Blocco note, e creare un nuovo file.
Immettere il codice riportato di seguito nel file.
<%@ Application Language="VB" %> <%@ Import Namespace="System.Web" %> <script > Sub Application_Start(sender As Object, e As EventArgs) ' Code that runs when the application is started. End Sub Sub Application_End(sender As Object, e As EventArgs) ' Code that runs when the application shuts down. End Sub </script>
<%@ Application Language="C#" %> <%@ Import Namespace="System.Web" %> <script > void Application_Start(Object sender, EventArgs e) { // Code that runs when the application is started. } void Application_End(Object sender, EventArgs e) { // Code that runs when the application shuts down. } </script>
Salvare il file come Global.asax nella directory principale dell'applicazione.
In tal modo si crea un file Global.asax di base, ossia un modulo compilato contenente il codice che viene eseguito all'avvio o all'arresto dell'applicazione.
Inserire il codice riportato di seguito nel metodo Application_Start del file Global.asax.
' Create a trace listener for Web forms. Dim gbTraceListener As New WebPageTraceListener() ' Add the event log trace listener to the collection. System.Diagnostics.Trace.Listeners.Add(gbTraceListener)
// Create a trace listener for Web forms. WebPageTraceListener gbTraceListener = new WebPageTraceListener(); // Add the event log trace listener to the collection. System.Diagnostics.Trace.Listeners.Add(gbTraceListener);
In questo modo si aggiunge a livello di codice un WebPageTraceListener all'insieme dei listener di analisi per l'applicazione.
Salvare il file come Global.aspx nella stessa directory del file Default.aspx.
Nel corso della procedura è stato aggiunto un WebPageTraceListener all'insieme dei listener di analisi per l'applicazione. Sebbene ASP.NET visualizzi i messaggi di analisi quando è attivata l'analisi per una pagina, i messaggi di analisi System.Diagnostics vengono scritti solo quando il codice in cui i messaggi di analisi risiedono viene compilato specificando l'opzione TRACE del compilatore. In altre parole, se non si compila esplicitamente la classe AuthorClass con l'opzione TRACE, non verranno visualizzati i messaggi di analisi neanche dopo l'aggiunta di un WebPageTraceListener.
È possibile configurare l'applicazione in modo che la compilazione venga automaticamente eseguita con l'opzione TRACE aggiungendo una nuova sezione al file Web.config.
Per fare in modo che l'applicazione venga automaticamente compilata con l'analisi attivata
Aprire il file Web.config dell'applicazione.
Inserire il codice riportato di seguito nel file Web.config dopo la sezione <system.diagnostics>.
<system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/d:TRACE" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="1" /> <compiler language="VB" extension=".vb" compilerOptions="/d:Trace=true" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </compilers> </system.codedom>
Per impostazione predefinita, questa sezione di configurazione fa in modo che tutti i moduli vengano compilati con l'opzione TRACE.
Se ora si visualizza la pagina Default.aspx, si noteranno i messaggi di analisi ASP.NET e System.Diagnostics. Se tali messaggi di analisi non vengono visualizzati, potrebbe essere necessario ricompilare l'oggetto AuthorClass.
Nelle informazioni di analisi è possibile osservare che l'oggetto AuthorClass è stato creato e il metodo GetAuthors è stato chiamato durante il metodo PreRender del ciclo di vita della pagina Web. È possibile inoltre notare un significativo ritardo nella creazione dell'oggetto AuthorClass. La differenza in termini di tempo tra il messaggio "Begin PreRender" e il messaggio "AuthorClass is created." è notevole in quanto l'oggetto AuthorClass apre il file Authors.xml e inizializza il DataSet durante la creazione e tale operazione è piuttosto onerosa.
Nella successiva sezione verrà illustrato come configurare l'applicazione Web ASP.NET in modo che tutti i messaggi di analisi vengano inviati nell'output di analisi .NET Framework.
Invio di tutto l'output di analisi nell'analisi .NET Framework
È possibile inviare i messaggi di analisi ASP.NET nell'output standard per i messaggi Trace, ad esempio una finestra di console, un disco, il log eventi di Windows o un altro tipo di output, attivando questa funzionalità nel file di configurazione Web.config.
Per inviare tutti i messaggi di analisi ASP.NET nell'output di analisi di sistema
Aprire il file Web.config dell'applicazione.
Aggiungere un nuovo attributo writeToDiagnosticsTrace all'elemento di analisi sotto <system.web> e quindi impostare writeToDiagnosticsTrace su true.
<system.web> <trace writeToDiagnosticsTrace="true"/> <customErrors mode="Off"/> </system.web>
Questo attributo di configurazione indica all'analisi ASP.NET di inviare i messaggi di analisi ASP.NET al meccanismo di output di analisi di sistema standard.
Per visualizzare i messaggi di analisi ASP.NET e System.Diagnostics in un contesto esterno a una pagina ASP.NET, utilizzare un oggetto TextWriterTraceListener per scrivere i messaggi di analisi in un file.
L'oggetto TextWriterTraceListener deve essere configurato per la scrittura in un file specifico utilizzando l'attributo initializeData di Elemento <add> per <listeners> per <trace>.
Utilizzare gli stessi passaggi seguiti per aggiungere l'oggetto WebPageTraceListener nella seconda procedura riportata nella sezione "Invio di tutto l'output di analisi al Web Form" della presente procedura dettagliata per aggiungere un oggetto TextWriterTraceListener al file Web.config e configurare tale oggetto per la scrittura nel file Asptesttrace.log nella directory principale dell'applicazione.
Se non è stato aggiunto un oggetto WebPageTraceListener a livello di codice nel file Global.asax, la sezione <system.diagnostics> del file Web.config sarà simile a quella riportata di seguito:
<system.diagnostics> <trace autoflush="true"> <listeners> <add name="WebPageTraceListener" type="System.Web.WebPageTraceListener, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> <add name="TestTracer" type="System.Diagnostics.TextWriterTraceListener, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="<app root directory>\Asptesttrace.log" /> </listeners> </trace> </system.diagnostics>
Nota: L'attributo initializeData nel passaggio precedente include un segnaposto per la directory principale dell'applicazione ASP.NET. Se si tenta di scrivere i messaggi di analisi in un file che non si trova nella directory principale dell'applicazione, potrebbe essere generata un'eccezione di protezione. Per impostazione predefinita, infatti, ASP.NET non consente la scrittura di file in percorsi del disco diversi dalla directory principale dell'applicazione, ad esempio C:\. Potrebbe inoltre essere necessario concedere l'autorizzazione di scrittura nel log di analisi per l'account del processo di lavoro ASP.NET.
Per impostazione predefinita, i dati di analisi vengono scritti nel flusso di destinazione una volta che il buffer di analisi è pieno.
Per visualizzare i dati di analisi nel log di analisi immediatamente dopo la richiesta della pagina ASP.NET, svuotare il buffer ad ogni scrittura impostando l'attributo autoflush su true come è stato eseguito nel passaggio precedente.
Il valore predefinito dell'attributo autoflush è false.
Per svuotare il buffer dalle informazioni di analisi a livello di codice, chiamare il metodo Flush.
Nota: Per l'oggetto business sviluppato in questa procedura dettagliata, se si chiama il metodo Flush nel metodo Page_Load e l'attributo autoflush è false, il log di analisi non visualizza i dati di analisi perché il rendering dell'oggetto business viene eseguito dopo il verificarsi dell'evento Load della pagina.
Passaggi successivi
In questa procedura dettagliata è stato illustrato come utilizzare le funzionalità di analisi ASP.NET e System.Diagnostics per inviare tutti i messaggi di analisi a un unico output. È possibile esplorare ulteriormente l'utilizzo dei listener di analisi e delle funzionalità di output e strumentazione ASP.NET ad esempio eseguendo le seguenti attività:
Aggiungere un oggetto EventLogTraceListener all'applicazione.
A tal fine, aggiungere un oggetto EventLogTraceListener a livello di codice o mediante il file di configurazione attenendosi alla stessa procedura utilizzata per l'oggetto WebPageTraceListener. È possibile aprire il log eventi per riesaminare i messaggi di analisi scritti dall'applicazione.
Modificare il componente business per utilizzare dati di un database invece di un file XML. Non è necessario apportare modifiche ai controlli della pagina.
Vedere anche
Altre risorse
Lettura delle informazioni di analisi di ASP.NET
Cenni preliminari sull'analisi di ASP.NET a livello di applicazione