Configurazione e strumentazione
da Microsoft
Nota
Poiché questo articolo è stato scritto, i provider di appartenenza ASP.NET sono stati sostituiti da ASP.NET Identity. È consigliabile aggiornare le app per usare la ASP.NET Identity Platform anziché i provider di appartenenza in primo piano al momento della scrittura di questo articolo. ASP.NET Identity offre numerosi vantaggi rispetto al sistema di appartenenza ASP.NET, tra cui :
- Prestazioni migliori
- Miglioramento dell'estendibilità e della testability
- Supporto per OAuth, OpenID Connect e autenticazione a due fattori
- Supporto delle identità basate sulle attestazioni
- Interoperabilità migliore con ASP.Net Core
Esistono modifiche importanti nella configurazione e nella strumentazione in ASP.NET 2.0. La nuova API di configurazione ASP.NET consente di apportare modifiche alla configurazione a livello di codice. Inoltre, molte nuove impostazioni di configurazione esistono per nuove configurazioni e strumentazione.
Esistono modifiche importanti nella configurazione e nella strumentazione in ASP.NET 2.0. La nuova API di configurazione ASP.NET consente di apportare modifiche alla configurazione a livello di codice. Inoltre, molte nuove impostazioni di configurazione esistono per nuove configurazioni e strumentazione.
In questo modulo verrà illustrato ASP.NET'API di configurazione in relazione alla lettura e alla scrittura in ASP.NET file di configurazione e verrà illustrata anche la strumentazione ASP.NET. Verranno inoltre illustrate le nuove funzionalità disponibili in ASP.NET traccia.
API di configurazione ASP.NET
L'API di configurazione ASP.NET consente di sviluppare, distribuire e gestire i dati di configurazione dell'applicazione usando un'unica interfaccia di programmazione. È possibile usare l'API di configurazione per sviluppare e modificare le configurazioni complete ASP.NET a livello di codice senza modificare direttamente il codice XML nei file di configurazione. È inoltre possibile usare l'API di configurazione nelle applicazioni console e negli script sviluppati, negli strumenti di gestione basati sul Web e negli snap-in Microsoft Management Console (MMC).
I due strumenti di gestione della configurazione seguenti usano l'API di configurazione e sono inclusi in .NET Framework versione 2.0:
- Lo snap-in MMC ASP.NET, che usa l'API di configurazione per semplificare le attività amministrative, fornendo una visualizzazione integrata dei dati di configurazione locali da tutti i livelli della gerarchia di configurazione.
- Strumento di amministrazione del sito Web, che consente di gestire le impostazioni di configurazione per applicazioni locali e remote, inclusi i siti ospitati.
L'API di configurazione ASP.NET include un set di oggetti di gestione ASP.NET che è possibile usare per configurare siti Web e applicazioni a livello di codice. Gli oggetti di gestione vengono implementati come libreria di classi .NET Framework. Il modello di programmazione api di configurazione consente di garantire la coerenza del codice e l'affidabilità applicando i tipi di dati in fase di compilazione. Per semplificare la gestione delle configurazioni dell'applicazione, l'API di configurazione consente di visualizzare i dati uniti da tutti i punti della gerarchia di configurazione come singola raccolta, anziché visualizzare i dati come raccolte separate da file di configurazione diversi. Inoltre, l'API di configurazione consente di modificare tutte le configurazioni dell'applicazione senza modificare direttamente il codice XML nei file di configurazione. Infine, l'API semplifica le attività di configurazione supportando strumenti amministrativi, ad esempio lo strumento di amministrazione del sito Web. L'API di configurazione semplifica la distribuzione supportando la creazione di file di configurazione in un computer ed eseguendo script di configurazione in più computer.
Nota
L'API di configurazione non supporta la creazione di applicazioni IIS.
Uso delle impostazioni di configurazione locali e remote
Un oggetto Configuration rappresenta la visualizzazione unita delle impostazioni di configurazione che si applicano a un'entità fisica specifica, ad esempio un computer o a un'entità logica, ad esempio un'applicazione o un sito Web. L'entità logica specificata può esistere nel computer locale o in un server remoto. Quando non esiste alcun file di configurazione per un'entità specificata, l'oggetto Configuration rappresenta le impostazioni di configurazione predefinite definite dal file Machine.config.
È possibile ottenere un oggetto Configuration usando uno dei metodi di configurazione aperti dalle classi seguenti:
- Classe ConfigurationManager, se l'entità è un'applicazione client.
- Classe WebConfigurationManager, se l'entità è un'applicazione Web.
Questi metodi restituiranno un oggetto Configuration, che a sua volta fornisce i metodi e le proprietà necessari per gestire i file di configurazione sottostanti. È possibile accedere a questi file per la lettura o la scrittura.
Lettura
Per leggere le informazioni di configurazione, usare il metodo GetSectionGroup o GetSectionGroup. L'utente o il processo di lettura devono disporre delle autorizzazioni di lettura per tutti i file di configurazione nella gerarchia.
Nota
Se si usa un metodo GetSection statico che accetta un parametro di percorso, il parametro path deve fare riferimento all'applicazione in cui è in esecuzione il codice. In caso contrario, il parametro viene ignorato e vengono restituite le informazioni di configurazione per l'applicazione attualmente in esecuzione.
Scrittura
Si usa uno dei metodi Save per scrivere le informazioni di configurazione. L'utente o il processo che scrive devono disporre delle autorizzazioni di scrittura per il file di configurazione e la directory a livello di gerarchia di configurazione corrente, nonché le autorizzazioni di lettura per tutti i file di configurazione nella gerarchia.
Per generare un file di configurazione che rappresenta le impostazioni di configurazione ereditate per un'entità specificata, usare uno dei metodi di configurazione di salvataggio seguenti:
- Metodo Save per creare un nuovo file di configurazione.
- Metodo SaveAs per generare un nuovo file di configurazione in un altro percorso.
Classi di configurazione e spazi dei nomi
Molte classi di configurazione e metodi sono simili tra loro. Nella tabella seguente vengono descritte le classi di configurazione e gli spazi dei nomi usati più comunemente.
Classe di configurazione o spazio dei nomi | Descrizione |
---|---|
Spazio dei nomi System.Configuration | Contiene le classi di configurazione principali per tutte le applicazioni .NET Framework. Le classi del gestore della sezione vengono usate per ottenere i dati di configurazione per una sezione da metodi, ad esempio GetSection e GetSectionGroup. Questi due metodi sono non statici. |
Classe System.Configuration.Configuration | Rappresenta un set di dati di configurazione per un computer, un'applicazione, una directory Web o un'altra risorsa. Questa classe contiene metodi utili, ad esempio GetSection e GetSectionGroup, per aggiornare le impostazioni di configurazione e ottenere riferimenti alle sezioni e ai gruppi di sezioni. Questa classe viene usata come tipo restituito per i metodi che ottengono dati di configurazione in fase di progettazione, ad esempio i metodi delle classi WebConfigurationManager e ConfigurationManager. |
Spazio dei nomi System.Web.Configuration | Contiene le classi del gestore della sezione per le sezioni di configurazione ASP.NET definite in ASP.NET Impostazioni di configurazione. Le classi del gestore della sezione vengono usate per ottenere i dati di configurazione per una sezione da metodi, ad esempio GetSection e GetSectionGroup. |
Classe System.Web.Configuration.WebConfigurationManager | Fornisce metodi utili per ottenere riferimenti alle impostazioni di configurazione in fase di esecuzione e progettazione. Questi metodi usano la classe System.Configuration.Configuration come tipo restituito. È possibile usare il metodo GetSection statico di questa classe o il metodo GetSection non statico della classe System.Configuration.ConfigurationManager interscambiabile. Per le configurazioni dell'applicazione Web, la classe System.Web.Configuration.WebConfigurationManager è consigliata anziché la classe System.Configuration.ConfigurationManager. |
Spazio dei nomi System.Configuration.Provider | Consente di personalizzare ed estendere il provider di configurazione. Si tratta della classe di base per tutte le classi provider nel sistema di configurazione. |
Spazio dei nomi System.Web.Management | Contiene classi e interfacce per la gestione e il monitoraggio dell'integrità delle applicazioni Web. In modo rigoroso, questo spazio dei nomi non è considerato parte dell'API di configurazione. Ad esempio, la traccia e l'attivazione degli eventi vengono eseguite dalle classi in questo spazio dei nomi. |
Spazio dei nomi System.Management.Instrumentation | Fornisce le classi necessarie per la strumentazione delle applicazioni per esporre le informazioni di gestione e gli eventi tramite Strumentazione gestione Windows (WMI) ai potenziali consumer. ASP.NET monitoraggio dell'integrità usa WMI per distribuire eventi. In modo rigoroso, questo spazio dei nomi non è considerato parte dell'API di configurazione. |
Lettura da file di configurazione ASP.NET
La classe WebConfigurationManager è la classe di base per la lettura da ASP.NET file di configurazione. Esistono essenzialmente tre passaggi per leggere ASP.NET file di configurazione:
- Ottenere un oggetto Configuration usando il metodo OpenWebConfiguration.
- Ottenere un riferimento alla sezione desiderata nel file di configurazione.
- Leggere le informazioni desiderate dal file di configurazione.
L'oggetto Configuration rappresenta non rappresenta un file di configurazione specifico. Rappresenta invece una visualizzazione unita della configurazione di un computer, di un'applicazione o di un sito Web. Nell'esempio di codice seguente viene creata un'istanza di un oggetto Configuration che rappresenta la configurazione di un'applicazione Web denominata ProductInfo.
Configuration config = WebConfigurationManager.OpenWebConfiguration("/ProductInfo);
Nota
Si noti che se il percorso /ProductInfo non esiste, il codice precedente restituirà la configurazione predefinita come specificato nel file machine.config.
Dopo aver creato l'oggetto Configuration, è possibile usare il metodo GetSection o GetSectionGroup per esaminare le impostazioni di configurazione. L'esempio seguente ottiene un riferimento alle impostazioni di rappresentazione per l'applicazione ProductInfo precedente:
Configuration config =
WebConfigurationManager.OpenWebConfiguration("/ProductInfo);
IdentitySection section =
(IdentitySection)config.GetSection("system.web/identity");
Scrittura in file di configurazione ASP.NET
Come nella lettura dai file di configurazione, la classe WebConfigurationManager è la base per la scrittura in Asp.NET file di configurazione. Esistono anche tre passaggi per scrivere in ASP.NET file di configurazione.
- Ottenere un oggetto Configuration usando il metodo OpenWebConfiguration.
- Ottenere un riferimento alla sezione desiderata nel file di configurazione.
- Scrivere le informazioni desiderate dal file di configurazione usando il metodo Save o SaveAs.
Il codice seguente modifica l'attributo di debug dell'elemento <di compilazione> su false:
System.Configuration.Configuration updateWebConfig =
System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/webApp");
System.Web.Configuration.CompilationSection compilation =
updateWebConfig.GetSection("system.web/compilation")
as System.Web.Configuration.CompilationSection;
compilation.Debug = false;
if (!compilation.SectionInformation.IsLocked) {
updateWebConfig.Save();
Response.Write("Save Success!");
} else {
Response.Write("Save Failed!");
}
Quando questo codice viene eseguito, l'attributo di debug dell'elemento <di compilazione> verrà impostato su false per il file di web.config dell'applicazione WebApp .
Spazio dei nomi System.Web.Management
Lo spazio dei nomi System.Web.Management fornisce le classi e le interfacce per la gestione e il monitoraggio dell'integrità delle applicazioni ASP.NET.
La registrazione viene eseguita definendo una regola che associa gli eventi a un provider. La regola definisce il tipo di eventi inviati al provider. Per la registrazione sono disponibili gli eventi di base seguenti:
Webbaseevent | Classe di evento di base per tutti gli eventi. Contiene le proprietà necessarie per tutti gli eventi, ad esempio il codice evento, il codice di dettaglio dell'evento, la data e l'ora in cui l'evento è stato generato, il numero di sequenza, il messaggio di evento e i dettagli dell'evento. |
---|---|
WebManagementEvent | Classe di evento di base per gli eventi di gestione, ad esempio durata dell'applicazione, richiesta, errore ed eventi di controllo. |
WebHeartbeatEvent | Evento generato dall'applicazione a intervalli regolari per acquisire informazioni utili sullo stato di runtime. |
Webauditevent | Classe di base per gli eventi di controllo di sicurezza, che vengono usati per contrassegnare condizioni come l'errore di autorizzazione, l'errore di decrittografia e così via. |
Webrequestevent | Classe di base per tutti gli eventi di richiesta informativa. |
WebBaseErrorEvent | Classe di base per tutti gli eventi che indicano le condizioni di errore. |
I tipi di provider disponibili consentono di inviare l'output degli eventi a Visualizzatore eventi, SQL Server, Strumentazione gestione Windows (WMI) e posta elettronica. I provider e i mapping di eventi preconfigurato riducono la quantità di lavoro necessaria per registrare l'output degli eventi.
ASP.NET 2.0 usa il provider log eventi predefinito per registrare gli eventi in base ai domini applicazione che iniziano e si arresta, nonché registrano eventuali eccezioni non gestite. Ciò consente di coprire alcuni degli scenari di base. Si supponga, ad esempio, che l'applicazione generi un'eccezione, ma l'utente non salva l'errore e non è possibile riprodurlo. Con la regola predefinita del registro eventi, è possibile raccogliere le informazioni sull'eccezione e sullo stack per ottenere un'idea migliore del tipo di errore che si è verificato. Un altro esempio si applica se l'applicazione perde lo stato della sessione. In tal caso, è possibile cercare nel registro eventi per determinare se il dominio dell'applicazione è in fase di riciclo e perché il dominio dell'applicazione è stato arrestato al primo posto.
Inoltre, il sistema di monitoraggio dell'integrità è estendibile. Ad esempio, è possibile definire eventi Web personalizzati, attivarli all'interno dell'applicazione e quindi definire una regola per inviare le informazioni sull'evento a un provider, ad esempio il messaggio di posta elettronica. In questo modo è possibile collegare facilmente la strumentazione ai provider di monitoraggio dell'integrità. Come altro esempio, è possibile generare un evento ogni volta che viene elaborato un ordine e configurare una regola che invia ogni evento al database SQL Server. È anche possibile generare un evento quando un utente non riesce ad accedere più volte in una riga e configurare l'evento per l'uso dei provider basati sulla posta elettronica.
La configurazione per i provider e gli eventi predefiniti viene archiviata nel file di Web.config globale. Il file Web.config globale archivia tutte le impostazioni basate sul Web archiviate nel file Machine.config in ASP.NET 1x. Il file Web.config globale si trova nella directory seguente:
%windir%\Microsoft.Net\Framework\v2.0.*\config\Web.config
La <sezione healthMonitoring> del file di Web.config globale fornisce le impostazioni di configurazione predefinite. È possibile eseguire l'override di queste impostazioni o configurare le proprie impostazioni implementando la <sezione healthMonitoring> nel file di Web.config per l'applicazione.
La <sezione healthMonitoring> del file di Web.config globale contiene gli elementi seguenti:
provider | Contiene provider configurati per il Visualizzatore eventi, WMI e SQL Server. |
---|---|
Eventmappings | Contiene i mapping per le varie classi WebBase. È possibile estendere questo elenco se si genera una classe di evento personalizzata. La generazione di una classe di evento personalizzata offre una granularità più fine sui provider a cui si inviano informazioni. Ad esempio, è possibile configurare eccezioni non gestite da inviare a SQL Server, inviando eventi personalizzati al messaggio di posta elettronica. |
Regole | Collega l'eventoMappings al provider. |
Buffer | Usato con SQL Server e provider di posta elettronica per determinare la frequenza con cui scaricare gli eventi nel provider. |
Di seguito è riportato un esempio di codice del file di Web.config globale.
<healthMonitoring>
<!-- Event Log Provider being added. -->
<providers>
<add name="EventLogProvider"
type="System.Web.Management.EventLogWebEventProvider,
System.Web,Version=2.0.0.0,Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
<!-- Event mapping provides a friendly name to the
events based on the WebBaseErrorEvent class. -->
<eventMappings>
<add name="All Errors"
type="System.Web.Management.WebBaseErrorEvent,
System.Web,Version=2.0.0.0,Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
startEventCode="0" endEventCode="2147483647" />
</eventMappings>
<!-- Rule tying the "All Errors" event mapping to the EventLog Provider. -->
<rules>
<add name="All Errors Default" eventName="All Errors"
provider="EventLogProvider"
profile="Default" minInstances="1"
maxLimit="Infinite" minInterval="00:01:00" custom="" />
</rules>
</healthMonitoring>
Come archiviare gli eventi per Visualizzatore eventi
Come accennato in precedenza, il provider per la registrazione degli eventi nel Visualizzatore eventi è configurato automaticamente nel file di Web.config globale. Per impostazione predefinita, vengono registrati tutti gli eventi basati su WebBaseErrorEvent e WebFailureAuditEvent . È possibile aggiungere altre regole per registrare informazioni aggiuntive nel registro eventi. Ad esempio, se si desidera registrare tutti gli eventi ,ad esempio ogni evento basato su WebBaseEvent, è possibile aggiungere la regola seguente al file Web.config:
<healthMonitoring>
<rules>
<add name="All Events" eventName="All Events"
provider="EventLogProvider" profile="Critical" />
</rules>
</healthMonitoring>
Questa regola collega la mappa eventi Tutti gli eventi al provider del registro eventi. Sia eventMapping che il provider sono inclusi nel file di Web.config globale.
Come archiviare gli eventi per SQL Server
Questo metodo usa il database ASPNETDB , generato dallo strumento di Aspnet_regsql.exe. Il provider predefinito usa la stringa di connessione LocalSqlServer, che usa un database basato su file nella cartella App_data o l'istanza SQLExpress locale di SQL Server. Entrambe le stringhe di connessione LocalSqlServer e SqlProvider sono configurate nel file di Web.config globale.
La stringa di connessione LocalSqlServer nel file di Web.config globale è simile alla seguente:
<connectionStrings>
<add name="LocalSqlServer"
connectionString="data source=.\SQLEXPRESS;
Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;
User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
Se si vuole usare un'altra istanza di SQL Server, è necessario usare lo strumento di Aspnet_regsql.exe, disponibile nella cartella %windir%\Microsoft.Net\Framework\v2.0.* . Usare lo strumento Aspnet_regsql.exe per generare un database ASPNETDB personalizzato nell'istanza di SQL Server, quindi aggiungere la stringa di connessione al file di configurazione delle applicazioni e quindi aggiungere un provider usando la nuova stringa di connessione. Dopo aver creato il database ASPNETDB , è necessario impostare una regola per collegare un eventMapping a sqlProvider.
Indipendentemente dal fatto che si usi il provider SqlProvider predefinito o si configuri il proprio provider, è necessario aggiungere una regola che collega il provider a una mappa eventi. La regola seguente collega il nuovo provider creato in precedenza alla mappa eventi Tutti gli eventi . Questa regola registrerà tutti gli eventi basati su WebBaseEvent e li invierà a MySqlWebEventProvider che userà la stringa di connessione MYASPNETDB. Il codice seguente aggiunge una regola per collegare il provider a una mappa eventi:
<healthMonitoring>
<rules>
<add name="All Events" eventName="All Events"
provider="MySqlWebEventProvider" profile="Critical"/>
</rules>
</healthMonitoring>
Se si desidera inviare solo errori a SQL Server, è possibile aggiungere la regola seguente:
<add name="All Errors"
eventName="All Errors"
provider="MySqlWebEventProvider"
profile="Critical"/>
Come inoltrare eventi a WMI
È anche possibile inoltrare gli eventi a WMI. Il provider WMI è configurato automaticamente nel file Web.config globale per impostazione predefinita.
Nell'esempio di codice seguente viene aggiunta una regola per inoltrare gli eventi a WMI:
<providers>
<add name="WmiWebEventProvider"
type="System.Web.Management.WmiWebEventProvider,System.Web,
Version=2.0.0.0,Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
È necessario aggiungere una regola per associare un eventMapping al provider e anche un'applicazione listener WMI per l'ascolto degli eventi. Nell'esempio di codice seguente viene aggiunta una regola per collegare il provider WMI alla mappa eventi Tutti gli eventi :
<rules>
<add name="All Events"
eventName="All Events" provider="WmiWebEventProvider"
profile="Critical" />
</rules>
Come inoltrare gli eventi alla posta elettronica
È anche possibile inoltrare eventi alla posta elettronica. Prestare attenzione alle regole degli eventi mappate al provider di posta elettronica, in quanto è possibile inviare involontariamente molte informazioni che potrebbero essere più adatte per SQL Server o registro eventi. Ci sono due provider di posta elettronica; SimpleMailWebEventProvider e TemplatedMailWebEventProvider. Ognuno ha gli stessi attributi di configurazione, ad eccezione degli attributi "template" e "detailedTemplateErrors", entrambi disponibili solo in TemplatedMailWebEventProvider.
Nota
Nessuno di questi provider di posta elettronica è configurato automaticamente. Sarà necessario aggiungerli al file Web.config.
La differenza principale tra questi due provider di posta elettronica è che SimpleMailWebEventProvider invia messaggi di posta elettronica in un modello generico che non può essere modificato. Il file di esempio Web.config aggiunge questo provider di posta elettronica all'elenco dei provider configurati usando la regola seguente:
<add name="mySimple-mailWebEventProvider"
type="System.Web.Management.Simple-mailWebEventProvider"
to="e-mail@foo.com" from="e-mail@foo.com"
maxMessagesPerNotification="1" maxEventsPerMessage="10"
buffer="true" bufferMode="Critical Notification"
subjectPrefix="Web Events"/>
La regola seguente viene aggiunta anche per collegare il provider di posta elettronica alla mappa eventi Tutti gli eventi :
<add name="All Events" eventName="All Events"
provider="mySimple-mailWebEventProvider" profile="Critical"/>
traccia ASP.NET 2.0
Esistono tre principali miglioramenti alla traccia in ASP.NET 2.0.
- Funzionalità di traccia integrata
- Accesso programmatico ai messaggi di traccia
- Traccia a livello di applicazione migliorata
Funzionalità di traccia integrata
È ora possibile instradare i messaggi generati dalla classe System.Diagnostics.Trace per ASP.NET output di traccia e instradare i messaggi generati da ASP.NET traccia a System.Diagnostics.Trace. È anche possibile inoltrare ASP.NET eventi di strumentazione a System.Diagnostics.Trace. Questa funzionalità viene fornita dal nuovo attributo writeToDiagnosticsTrace dell'elemento <di traccia> . Quando questo valore booleano è true, ASP.NET i messaggi di traccia vengono inoltrati all'infrastruttura di traccia System.Diagnostics per l'uso da parte di tutti i listener registrati per visualizzare i messaggi di traccia.
Accesso a livello di codice ai messaggi di traccia
ASP.NET 2.0 consente l'accesso a livello di codice a tutti i messaggi di traccia tramite la classe TraceContextRecord e l'insieme TraceRecords . Il modo più efficiente per accedere ai messaggi di traccia consiste nel registrare un delegato TraceContextEventHandler (anche nuovo in ASP.NET 2.0) per gestire il nuovo evento TraceFinished . È quindi possibile scorrere i messaggi di traccia nel modo desiderato.
L'esempio di codice seguente illustra quanto segue:
void Page_Load(object sender, EventArgs e) {
// Register a handler for the TraceFinished event.
Trace.TraceFinished += new
TraceContextEventHandler(this.OnTraceFinished);
// Write a trace message.
Trace.Write("Web Forms Infrastructure Methods",
"USERMESSAGE: Page_Load complete.");
}
// A TraceContextEventHandler for the TraceFinished event.
void OnTraceFinished(object sender, TraceContextEventArgs e) {
TraceContextRecord r = null;
// Iterate through the collection of trace records and write
// them to the response stream.
foreach (object o in e.TraceRecords) {
r = (TraceContextRecord)o;
Response.Write(String.Format("trace message: {0} <BR>",
r.Message));
}
}
Nell'esempio precedente si esegue il ciclo nell'insieme TraceRecords e quindi si scrive ogni messaggio nel flusso Response.
Miglioramento della traccia Application-Level
La traccia a livello di applicazione viene migliorata tramite l'introduzione del nuovo attributo mostRecent dell'elemento <di traccia> . Questo attributo specifica se l'output di traccia a livello di applicazione più recente viene visualizzato e i dati di traccia precedenti oltre i limiti indicati dal requestLimit vengono eliminati. Se false, i dati di traccia vengono visualizzati per le richieste fino a quando non viene raggiunto l'attributo requestLimit.
strumenti da riga di comando ASP.NET
Sono disponibili diversi strumenti da riga di comando per facilitare la configurazione di ASP.NET. ASP.NET gli sviluppatori devono avere familiarità con lo strumento di aspnet_regiis.exe. ASP.NET 2.0 offre tre altri strumenti da riga di comando per facilitare la configurazione.
Sono disponibili gli strumenti da riga di comando seguenti:
Strumento | Uso |
---|---|
aspnet_regiis.exe | Consente la registrazione di ASP.NET con IIS. Esistono due versioni di questi strumenti forniti con ASP.NET 2.0, uno per i sistemi a 32 bit (nella cartella Framework) e uno per i sistemi a 64 bit (nella cartella Framework64). La versione a 64 bit non verrà installata in un sistema operativo a 32 bit. |
aspnet_regsql.exe | Lo strumento di registrazione ASP.NET SQL Server viene usato per creare un database di Microsoft SQL Server da usare dai provider di SQL Server in ASP.NET oppure per aggiungere o rimuovere opzioni da un database esistente. Il file Aspnet_regsql.exe si trova nella cartella [unità:]\WINDOWS\Microsoft.NET\Framework\versionNumber nel server Web. |
aspnet_regbrowsers.exe | Lo strumento di registrazione del browser ASP.NET analizza e compila tutte le definizioni del browser a livello di sistema in un assembly e installa l'assembly nella Global Assembly Cache. Lo strumento usa i file di definizione del browser (. File BROWSER) dalla sottodirectory Browser .NET Framework. Lo strumento è disponibile nella directory %SystemRoot%\Microsoft.NET\Framework\version\. |
aspnet_compiler.exe | Lo strumento di compilazione ASP.NET consente di compilare un'applicazione Web ASP.NET, sul posto o per la distribuzione in un percorso di destinazione, ad esempio un server di produzione. La compilazione sul posto consente le prestazioni dell'applicazione perché gli utenti finali non riscontrano un ritardo nella prima richiesta all'applicazione durante la compilazione dell'applicazione. |
Poiché lo strumento di aspnet_regiis.exe non è nuovo per ASP.NET 2.0, non verrà illustrato qui.
Strumento di registrazione ASP.NET SQL Server - aspnet_regsql.exe
È possibile impostare diversi tipi di opzioni usando lo strumento di registrazione ASP.NET SQL Server. È possibile specificare una connessione SQL, specificare quali ASP.NET servizi dell'applicazione usano SQL Server per gestire le informazioni, indicare il database o la tabella utilizzata per la dipendenza della cache SQL e aggiungere o rimuovere il supporto per l'uso di SQL Server per archiviare le procedure e lo stato della sessione.
Diversi servizi applicazioni ASP.NET si basano su un provider per gestire l'archiviazione e il recupero di dati da un'origine dati. Ogni provider è specifico dell'origine dati. ASP.NET include un provider di SQL Server per le funzionalità di ASP.NET seguenti:
- Appartenenza (classe SqlMembershipProvider ).
- Gestione dei ruoli (classe SqlRoleProvider ).
- Profilo (classe SqlProfileProvider ).
- Personalizzazione web part (classe SqlPersonalizationProvider ).
- Eventi Web (classe SqlWebEventProvider ).
Quando si installa ASP.NET, il file Machine.config per il server include elementi di configurazione che specificano SQL Server provider per ognuna delle funzionalità ASP.NET che si basano su un provider. Questi provider sono configurati per impostazione predefinita per connettersi a un'istanza utente locale di SQL Server Express 2005. Se si modifica la stringa di connessione predefinita usata dai provider, prima di poter usare una delle funzionalità di ASP.NET configurate nella configurazione del computer, è necessario installare il database SQL Server e gli elementi del database per la funzionalità scelta usando Aspnet_regsql.exe. Se il database specificato con lo strumento di registrazione SQL non esiste già (aspnetdb sarà il database predefinito se non ne viene specificato uno nella riga di comando), l'utente corrente deve disporre dei diritti per creare database in SQL Server nonché per creare elementi dello schema all'interno di un database.
Dipendenza dalla cache SQL
Una funzionalità avanzata di ASP.NET memorizzazione nella cache di output è la dipendenza della cache SQL. La dipendenza della cache SQL supporta due diverse modalità di funzionamento: una che usa un'implementazione ASP.NET di polling di tabelle e una seconda modalità che usa le funzionalità di notifica delle query di SQL Server 2005. Lo strumento di registrazione SQL può essere usato per configurare la modalità di polling delle tabelle.
Stato della sessione
Per impostazione predefinita, i valori e le informazioni dello stato della sessione vengono archiviati in memoria all'interno del processo di ASP.NET. In alternativa, è possibile archiviare i dati di sessione in un database SQL Server, in cui possono essere condivisi da più server Web. Se il database specificato per lo stato della sessione con lo strumento di registrazione SQL non esiste già, l'utente corrente deve disporre dei diritti per creare database in SQL Server nonché per creare elementi dello schema all'interno di un database. Se il database esiste, l'utente corrente deve disporre dei diritti per creare elementi dello schema nel database esistente.
Per installare il database dello stato della sessione in SQL Server, eseguire lo strumento Aspnet_regsql.exe e fornire le informazioni seguenti con il comando :
- Nome dell'istanza di SQL Server usando l'opzione -S.
- Credenziali di accesso per un account autorizzato a creare un database in un computer che esegue SQL Server. Usare l'opzione -E per usare l'utente attualmente connesso oppure usare l'opzione -U per specificare un ID utente insieme all'opzione -P per specificare una password.
- Opzione della riga di comando -ssadd per aggiungere il database dello stato della sessione.
Per impostazione predefinita, non è possibile utilizzare lo strumento Aspnet_regsql.exe per installare il database dello stato della sessione in un computer che esegue SQL Server 2005 Express Edition.
Strumento di registrazione del browser ASP.NET - aspnet_regbrowsers.exe
In ASP.NET versione 1.1 il file Machine.config conteneva una sezione denominata <browserCaps>. Questa sezione contiene una serie di voci XML che hanno definito le configurazioni per vari browser basati su un'espressione regolare. Per ASP.NET versione 2.0, un nuovo oggetto . Il file BROWSER definisce i parametri di un browser specifico usando voci XML. È possibile aggiungere informazioni in un nuovo browser aggiungendo un nuovo oggetto . File BROWSER nella cartella che si trova in %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers nel sistema.
Poiché un'applicazione non legge un file .config ogni volta che richiede informazioni sul browser, è possibile creare un nuovo . File BROWSER ed eseguire Aspnet_regbrowsers.exe per aggiungere le modifiche necessarie all'assembly. In questo modo il server può accedere immediatamente alle nuove informazioni del browser in modo che non sia necessario arrestare alcuna applicazione per raccogliere le informazioni. Un'applicazione può accedere alle funzionalità del browser tramite la proprietà Browser dell'oggetto HttpRequest corrente.
Quando si esegue aspnet_regbrowser.exe sono disponibili le opzioni seguenti:
Opzione | Descrizione |
---|---|
-? | Visualizza il testo della Guida Aspnet_regbbrowsers.exe nella finestra di comando. |
-i | Crea l'assembly delle funzionalità del browser di runtime e lo installa nella Global Assembly Cache. |
-u | Disinstalla l'assembly delle funzionalità del browser di runtime dalla Global Assembly Cache. |
Strumento di compilazione ASP.NET - aspnet_compiler.exe
Lo strumento di compilazione ASP.NET può essere usato in due modi generali: per la compilazione sul posto e la compilazione per la distribuzione, in cui viene specificata una directory di output di destinazione.
Compilazione di un'applicazione sul posto
Lo strumento di compilazione ASP.NET può compilare un'applicazione sul posto, ovvero simula il comportamento di effettuare più richieste all'applicazione, causando così la compilazione regolare. Gli utenti di un sito precompilato non riscontrano un ritardo causato dalla compilazione della pagina alla prima richiesta.
Quando si precompila un sito sul posto, si applicano gli elementi seguenti:
- Il sito mantiene i file e la struttura di directory.
- È necessario disporre di compilatori per tutti i linguaggi di programmazione usati dal sito nel server.
- Se la compilazione di un file non riesce, l'intero sito non riesce a compilare.
È anche possibile ricompilare un'applicazione sul posto dopo aver aggiunto nuovi file di origine. Lo strumento compila solo i file nuovi o modificati a meno che non si includa l'opzione -c .
Nota
La compilazione di un'applicazione che contiene un'applicazione nidificata non compila l'applicazione nidificata. L'applicazione annidata deve essere compilata separatamente.
Compilazione di un'applicazione per la distribuzione
Si compila un'applicazione per la distribuzione (compilazione in un percorso di destinazione) specificando il parametro targetDir. TargetDir può essere il percorso finale per l'applicazione Web o l'applicazione compilata può essere ulteriormente distribuita. L'uso dell'opzione -u compila l'applicazione in modo che sia possibile apportare modifiche a determinati file nell'applicazione compilata senza ricompilarla. Aspnet_compiler.exe distingue i tipi di file statici e dinamici e li gestisce in modo diverso durante la creazione dell'applicazione risultante.
- I tipi di file statici sono quelli che non dispongono di un compilatore o di un provider di compilazione associato, ad esempio file con estensione css, .gif, .htm, .html, .jpg, .js e così via. Questi file vengono semplicemente copiati nel percorso di destinazione, con le relative posizioni nella struttura di directory mantenuta.
- I tipi di file dinamici sono quelli con un compilatore o un provider di compilazione associato, inclusi i file con estensioni di file specifiche di ASP.NET, ad esempio .asax, .ascx, .ashx, .aspx, .browser, .master e così via. Lo strumento di compilazione ASP.NET genera assembly da questi file. Se l'opzione -u viene omessa, lo strumento crea anche file con l'estensione del nome file . COMPILATO che esegue il mapping dei file di origine originali all'assembly. Per garantire che la struttura di directory dell'origine dell'applicazione venga mantenuta, lo strumento genera i file segnaposto nei percorsi corrispondenti nell'applicazione di destinazione.
È necessario usare l'opzione -u per indicare che il contenuto dell'applicazione compilata può essere modificato. In caso contrario, le modifiche successive vengono ignorate o causano errori di runtime.
Nella tabella seguente viene descritto come lo strumento di compilazione ASP.NET gestisce tipi di file diversi quando è inclusa l'opzione -u .
Tipo di file | Azione del compilatore |
---|---|
.ascx, .aspx, .master | Questi file vengono suddivisi in markup e codice sorgente, inclusi sia i file code-behind che qualsiasi codice racchiuso tra <gli elementi runat="server".> Il codice sorgente viene compilato in assembly, con nomi derivati da un algoritmo hash e gli assembly vengono inseriti nella directory Bin. Qualsiasi codice inline, ovvero il codice racchiuso tra le <parentesi % e %> , viene incluso nel markup e non compilato. I nuovi file con lo stesso nome dei file di origine vengono creati per contenere il markup e inseriti nelle directory di output corrispondenti. |
.ashx, .asmx | Questi file non vengono compilati e vengono spostati nelle directory di output così com'è e non vengono compilati. Se si vuole compilare il codice del gestore, inserire il codice nei file di codice sorgente nella directory App_Code. |
.cs, .vb, .jsl, .cpp (non inclusi i file code-behind per i tipi di file elencati in precedenza) | Questi file vengono compilati e inclusi come risorsa negli assembly che li fanno riferimento. I file di origine non vengono copiati nella directory di output. Se non viene fatto riferimento a un file di codice, non viene compilato. |
Tipi di file personalizzati | Questi file non vengono compilati. Questi file vengono copiati nelle directory di output corrispondenti. |
File di codice sorgente nella sottodirectory App_Code | Questi file vengono compilati in assembly e inseriti nella directory Bin. |
File con estensione resx e .resource nella sottodirectory App_GlobalResources | Questi file vengono compilati in assembly e inseriti nella directory Bin. Non viene creata alcuna App_GlobalResources sottodirectory nella directory di output principale e non vengono copiati file resx o resources che si trovano nella directory di origine. |
File con estensione resx e .resource nella sottodirectory App_LocalResources | Questi file non vengono compilati e vengono copiati nelle directory di output corrispondenti. |
File skin nella sottodirectory App_Themes | I file con estensione skin e i file di tema statici non vengono compilati e vengono copiati nelle directory di output corrispondenti. |
.browser Web.config Tipi di file statici Assembly già presenti nella directory Bin | Questi file vengono copiati così come sono nelle directory di output. |
Nella tabella seguente viene descritto il modo in cui lo strumento di compilazione ASP.NET gestisce tipi di file diversi quando l'opzione -u viene omessa.
Tipo di file | Azione del compilatore |
---|---|
.aspx, .asmx, .ashx, .master | Questi file vengono suddivisi in markup e codice sorgente, inclusi sia i file code-behind che qualsiasi codice racchiuso tra <gli elementi runat="server".> Il codice sorgente viene compilato in assembly, con nomi derivati da un algoritmo hash. Gli assembly risultanti vengono inseriti nella directory Bin. Qualsiasi codice inline, ovvero il codice racchiuso tra le <parentesi % e %> , viene incluso nel markup e non compilato. Il compilatore crea nuovi file per contenere il markup con lo stesso nome dei file di origine. Questi file risultanti vengono inseriti nella directory Bin. Il compilatore crea anche file con lo stesso nome dei file di origine, ma con l'estensione . COMPILATO che contiene informazioni di mapping. Le. I file COMPILATI vengono inseriti nelle directory di output corrispondenti al percorso originale dei file di origine. |
.ascx | Questi file vengono suddivisi in markup e codice sorgente. Il codice sorgente viene compilato in assembly e inserito nella directory Bin, con nomi derivati da un algoritmo hash. Non vengono generati file di markup. |
.cs, .vb, .jsl, .cpp (non inclusi i file code-behind per i tipi di file elencati in precedenza) | Il codice sorgente a cui fanno riferimento gli assembly generati dai file con estensione ascx, ashx o aspx viene compilato in assembly e inserito nella directory Bin. Non vengono copiati file di origine. |
Tipi di file personalizzati | Questi file vengono compilati come file dinamici. A seconda del tipo di file su cui si basano, il compilatore può inserire i file di mapping nelle directory di output. |
File nella sottodirectory App_Code | I file di codice sorgente in questa sottodirectory vengono compilati in assembly e inseriti nella directory Bin. |
File nella sottodirectory App_GlobalResources | Questi file vengono compilati in assembly e inseriti nella directory Bin. Nella directory di output principale non viene creata alcuna App_GlobalResources sottodirectory. Se il file di configurazione specifica appliesTo="All", i file con estensione resx e resources vengono copiati nelle directory di output. Non vengono copiati se vi viene fatto riferimento da un oggetto BuildProvider. |
File con estensione resx e .resource nella sottodirectory App_LocalResources | Questi file vengono compilati in assembly con nomi univoci e inseriti nella directory Bin. Nessun file con estensione resx o resource viene copiato nelle directory di output. |
File skin nella sottodirectory App_Themes | I temi vengono compilati in assembly e inseriti nella directory Bin. I file Stub vengono creati per i file con estensione skin e inseriti nella directory di output corrispondente. I file statici , ad esempio css, vengono copiati nelle directory di output. |
.browser Web.config Tipi di file statici Assembly già presenti nella directory Bin | Questi file vengono copiati così come sono nella directory di output. |
Correzione dei nomi degli assembly
Alcuni scenari, ad esempio la distribuzione di un'applicazione Web tramite MSI Windows Installer, richiedono l'uso di nomi e contenuti di file coerenti, nonché strutture di directory coerenti per identificare assembly o impostazioni di configurazione per gli aggiornamenti. In questi casi, è possibile usare l'opzione -fixednames per specificare che lo strumento di compilazione ASP.NET deve compilare un assembly per ogni file di origine anziché usare la posizione in cui vengono compilate più pagine in assembly. Ciò può comportare un numero elevato di assembly, pertanto se si è interessati alla scalabilità, è consigliabile usare questa opzione con cautela.
Compilazione con nome sicuro
Le opzioni -aptca, -delaysign, -keycontainer e -keyfile vengono fornite in modo da poter usare Aspnet_compiler.exe per creare assembly con nome sicuro senza usare lo strumento nome sicuro (Sn.exe) separatamente. Queste opzioni corrispondono rispettivamente a AllowPartiallyTrustedCallersAttribute, AssemblyDelaySignAttribute, AssemblyKeyNameAttribute e AssemblyKeyFileAttribute.
La discussione di questi attributi non rientra nell'ambito di questo corso.
Lab
Ognuno dei lab seguenti si basa sui lab precedenti. Sarà necessario farlo in ordine.
Lab 1: Uso dell'API di configurazione
- Creare un nuovo sito Web denominato mod9lab.
- Aggiungere un nuovo file di configurazione Web al sito.
- Aggiungere quanto segue al file web.config:
<authorization>
<deny users="?"/>
</authorization>
<identity impersonate="true"/>
In questo modo si avrà l'autorizzazione per salvare le modifiche apportate al file di web.config.
- Aggiungere un nuovo controllo Label a Default.aspx e modificare l'ID in lblDebugStatus.
- Aggiungere un nuovo controllo Button a Default.aspx.
- Modificare l'ID del controllo Button impostando btnToggleDebug e l'opzione Testo su Attiva/Disattiva stato debug.
- Aprire la visualizzazione codice per il file code-behind di Default.aspx e aggiungere un'istruzione using per System.Web.Configuration come indicato di seguito:
using System.Web.Configuration;
- Aggiungere due variabili private alla classe e un metodo Page_Init, come illustrato di seguito:
public partial class _Default : System.Web.UI.Page {
private bool _debugStatus;
private CompilationSection compilation;
private Configuration config;
protected void Page_Init(object sender, EventArgs e) {
config = WebConfigurationManager.OpenWebConfiguration("/mod9lab");
compilation =
(CompilationSection)config.GetSection("system.web/compilation");
_debugStatus = compilation.Debug;
}
}
- Aggiungere il codice seguente a Page_Load:
lblDebugStatus.Text = "Debug set to: " + _debugStatus.ToString();
- Salvare e esplorare default.aspx. Si noti che il controllo Etichetta visualizza lo stato di debug corrente.
- Fare doppio clic sul controllo Pulsante nella finestra di progettazione e aggiungere il codice seguente all'evento Click per il controllo Button:
compilation.Debug = !_debugStatus;
config.Save();
lblDebugStatus.Text = "Debug set to: " + compilation.Debug.ToString();
- Salvare e esplorare default.aspx e fare clic sul pulsante.
- Aprire il file web.config dopo ogni clic del pulsante e osservare l'attributo di debug nella <sezione di compilazione> .
Lab 2: Riavvio dell'applicazione di registrazione
In questo lab si creerà il codice che consente di attivare la registrazione degli arresti, delle avvio e delle ricompilazione nell'Visualizzatore eventi.
- Aggiungere un oggetto DropDownList a default.aspx e modificare l'ID in ddlLogAppEvents.
- Impostare la proprietà AutoPostBack per DropDownList su true.
- Aggiungere tre elementi all'insieme Items per DropDownList. Impostare Il testo per il primo elemento Seleziona valore e il valore -1. Impostare Il testo e il valore del secondo elemento True e il valore e il testo del terzo elemento False.
- Aggiungere una nuova etichetta a default.aspx. Modificare l'ID in lblLogAppEvents.
- Aprire la visualizzazione code-behind per default.aspx e aggiungere una nuova dichiarazione per una variabile di tipo HealthMonitoringSection, come illustrato di seguito:
public partial class _Default : System.Web.UI.Page {
private bool _debugStatus;
private CompilationSection compilation;
private Configuration config;
// new variable below
private HealthMonitoringSection health;
}
- Aggiungere il codice seguente al codice esistente in Page_Init:
health = (HealthMonitoringSection)config.GetSection("system.web/healthMonitoring");
- Fare doppio clic su DropDownList e aggiungere il codice seguente all'evento SelectedIndexChanged:
if (ddlLogAppEvents.SelectedValue != "-1") {
if (Convert.ToBoolean(ddlLogAppEvents.SelectedValue)) {
RuleSettings appRules = new
RuleSettings("AppRestartEvents",
"Application Lifetime Events",
"EventLogProvider");
health.Rules.Add(appRules);
config.Save();
} else {
health.Rules.Remove("AppRestartEvents");
config.Save();
}
}
Esplorare default.aspx.
Impostare l'elenco a discesa su False.
Cancellare il log dell'applicazione nella Visualizzatore eventi.
Fare clic sul pulsante per modificare l'attributo Debug per l'applicazione.
Aggiornare il log dell'applicazione nella Visualizzatore eventi.
- Sono stati registrati eventi?
- Perché sì o perché no?
Impostare l'elenco a discesa su True.
Fare clic sul pulsante per attivare l'attributo Debug per l'applicazione.
Aggiornare l'account di accesso dell'applicazione al Visualizzatore eventi.
- Sono stati registrati eventi?
- Qual è il motivo dell'arresto dell'app?
Sperimentare l'attivazione e la disattivazione della registrazione e esaminare le modifiche apportate al file di web.config.
Altre informazioni:
ASP.NET modello provider di 2.0 consente di creare provider personalizzati per non solo la strumentazione dell'applicazione, ma per molti altri usi, ad esempio appartenenza, profili e così via. Per informazioni dettagliate sulla scrittura di un provider personalizzato per registrare gli eventi dell'applicazione in un file di testo, visitare questo collegamento.