Compartilhar via


Configuração e instrumentação

pela Microsoft

Observação

Desde que este artigo foi escrito, os provedores de associação de ASP.NET foram substituídos por ASP.NET Identity. É altamente recomendável atualizar aplicativos para usar a plataforma ASP.NET Identity em vez dos provedores de associação apresentados no momento em que este artigo foi escrito. ASP.NET Identity tem várias vantagens sobre o sistema de associação ASP.NET, incluindo :

  • Melhor desempenho
  • Extensibilidade e testabilidade aprimoradas
  • Suporte para OAuth, OpenID Connect e autenticação de dois fatores
  • Suporte à identidade baseada em declarações
  • Melhor interoperabilidade com ASP.Net Core

Há grandes alterações na configuração e na instrumentação no ASP.NET 2.0. A nova API de configuração de ASP.NET permite que as alterações de configuração sejam feitas programaticamente. Além disso, muitas novas configurações existem permitem novas configurações e instrumentação.

Há grandes alterações na configuração e na instrumentação no ASP.NET 2.0. A nova API de configuração de ASP.NET permite que as alterações de configuração sejam feitas programaticamente. Além disso, muitas novas configurações existem permitem novas configurações e instrumentação.

Neste módulo, discutiremos ASP.NET a API de configuração no que diz respeito à leitura e gravação em arquivos de configuração ASP.NET e também abordaremos ASP.NET instrumentação. Também abordaremos os novos recursos disponíveis no rastreamento de ASP.NET.

API de Configuração do ASP.NET

A API de configuração do ASP.NET permite que você desenvolva, implante e gerencie dados de configuração do aplicativo usando uma única interface de programação. Você pode usar a API de configuração para desenvolver e modificar configurações de ASP.NET completas programaticamente sem editar diretamente o XML nos arquivos de configuração. Além disso, você pode usar a API de configuração em aplicativos de console e scripts que desenvolve, em ferramentas de gerenciamento baseadas na Web e em snap-ins do MMC (Console de Gerenciamento da Microsoft).

As duas ferramentas de gerenciamento de configuração a seguir usam a API de configuração e estão incluídas no .NET Framework versão 2.0:

  • O ASP.NET snap-in do MMC, que usa a API de configuração para simplificar tarefas administrativas, fornecendo uma exibição integrada dos dados de configuração local de todos os níveis da hierarquia de configuração.
  • A Ferramenta de Administração de Site, que permite gerenciar as configurações de aplicativos locais e remotos, incluindo sites hospedados.

A API de configuração ASP.NET é composta por um conjunto de objetos de gerenciamento de ASP.NET que você pode usar para configurar sites e aplicativos programaticamente. Os objetos de gerenciamento são implementados como uma biblioteca de classes .NET Framework. O modelo de programação da API de configuração ajuda a garantir a consistência e a confiabilidade do código aplicando tipos de dados em tempo de compilação. Para facilitar o gerenciamento de configurações de aplicativos, a API de configuração permite exibir dados mesclados de todos os pontos na hierarquia de configuração como uma única coleção, em vez de exibir os dados como coleções separadas de diferentes arquivos de configuração. Além disso, a API de configuração permite manipular configurações inteiras do aplicativo sem editar diretamente o XML nos arquivos de configuração. Por fim, a API simplifica as tarefas de configuração dando suporte a ferramentas administrativas, como a Ferramenta de Administração de Site. A API de configuração simplifica a implantação dando suporte à criação de arquivos de configuração em um computador e à execução de scripts de configuração em vários computadores.

Observação

A API de configuração não dá suporte à criação de aplicativos IIS.

Trabalhando com configurações locais e remotas

Um objeto Configuration representa a exibição mesclada das configurações que se aplicam a uma entidade física específica, como um computador ou a uma entidade lógica, como um aplicativo ou um site da Web. A entidade lógica especificada pode existir no computador local ou em um servidor remoto. Quando nenhum arquivo de configuração existe para uma entidade especificada, o objeto Configuration representa as configurações padrão, conforme definido pelo arquivo Machine.config.

Você pode obter um objeto Configuration usando um dos métodos de configuração abertos das seguintes classes:

  1. A classe ConfigurationManager, se sua entidade for um aplicativo cliente.
  2. A classe WebConfigurationManager, se sua entidade for um aplicativo Web.

Esses métodos retornarão um objeto Configuration, que, por sua vez, fornece os métodos e as propriedades necessários para lidar com os arquivos de configuração subjacentes. Você pode acessar esses arquivos para leitura ou gravação.

Lendo

Use o método GetSection ou GetSectionGroup para ler informações de configuração. O usuário ou processo que lê deve ter permissões de leitura em todos os arquivos de configuração na hierarquia.

Observação

Se você usar um método GetSection estático que usa um parâmetro path, o parâmetro path deverá se referir ao aplicativo no qual o código está em execução. Caso contrário, o parâmetro será ignorado e as informações de configuração do aplicativo em execução no momento serão retornadas.

Gravando

Você usa um dos métodos Save para gravar informações de configuração. O usuário ou processo que grava deve ter permissões de Gravação no arquivo de configuração e no diretório no nível da hierarquia de configuração atual, bem como permissões de leitura em todos os arquivos de configuração na hierarquia.

Para gerar um arquivo de configuração que representa as configurações herdadas de uma entidade especificada, use um dos seguintes métodos de configuração de salvamento:

  1. O método Save para criar um novo arquivo de configuração.
  2. O método SaveAs para gerar um novo arquivo de configuração em outro local.

Classes de configuração e namespaces

Muitas classes de configuração e métodos são semelhantes entre si. A tabela a seguir descreve as classes de configuração e os namespaces mais usados.

Classe de configuração ou namespace Descrição
Namespace System.Configuration Contém as classes de configuração main para todos os aplicativos .NET Framework. As classes de manipulador de seção são usadas para obter dados de configuração para uma seção de métodos, como GetSection e GetSectionGroup. Esses dois métodos não são estáticos.
Classe System.Configuration.Configuration Representa um conjunto de dados de configuração para um computador, aplicativo, diretório Web ou outro recurso. Essa classe contém métodos úteis, como GetSection e GetSectionGroup, para atualizar as configurações e obter referências a seções e grupos de seções. Essa classe é usada como um tipo de retorno para métodos que obtêm dados de configuração em tempo de design, como os métodos das classes WebConfigurationManager e ConfigurationManager.
Namespace System.Web.Configuration Contém as classes de manipulador de seção para as seções de configuração de ASP.NET definidas em Configurações de ASP.NET. As classes de manipulador de seção são usadas para obter dados de configuração para uma seção de métodos, como GetSection e GetSectionGroup.
Classe System.Web.Configuration.WebConfigurationManager Fornece métodos úteis para obter referências às configurações de tempo de execução e tempo de design. Esses métodos usam a classe System.Configuration.Configuration como um tipo de retorno. Você pode usar o método GetSection estático dessa classe ou o método GetSection não estático da classe System.Configuration.ConfigurationManager intercambiável. Para configurações de aplicativo Web, a classe System.Web.Configuration.WebConfigurationManager é recomendada em vez da classe System.Configuration.ConfigurationManager.
Namespace System.Configuration.Provider Fornece uma maneira de personalizar e estender o provedor de configuração. Essa é a classe base para todas as classes de provedor no sistema de configuração.
Namespace System.Web.Management Contém classes e interfaces para gerenciar e monitorar a integridade de aplicativos Web. Estritamente falando, esse namespace não é considerado parte da API de configuração. Por exemplo, o rastreamento e o disparo de eventos são realizados pelas classes nesse namespace.
Namespace System.Management.Instrumentation Fornece as classes necessárias para que a instrumentação de aplicativos exponha suas informações de gerenciamento e eventos por meio da WMI (Instrumentação de Gerenciamento do Windows) a potenciais consumidores. ASP.NET monitoramento de integridade usa o WMI para fornecer eventos. Estritamente falando, esse namespace não é considerado parte da API de configuração.

Leitura de arquivos de configuração de ASP.NET

A classe WebConfigurationManager é a classe principal para leitura de ASP.NET arquivos de configuração. Há essencialmente três etapas para ler ASP.NET arquivos de configuração:

  1. Obtenha um objeto Configuration usando o método OpenWebConfiguration.
  2. Obtenha uma referência à seção desejada no arquivo de configuração.
  3. Leia as informações desejadas do arquivo de configuração.

O objeto Configuration representa não representa um arquivo de configuração específico. Em vez disso, ele representa uma exibição mesclada da configuração de um computador, aplicativo ou site. O exemplo de código a seguir cria uma instância de um objeto Configuration que representa a configuração de um aplicativo Web chamado ProductInfo.

Configuration config = WebConfigurationManager.OpenWebConfiguration("/ProductInfo);

Observação

Observe que, se o caminho /ProductInfo não existir, o código acima retornará a configuração padrão conforme especificado no arquivo machine.config.

Depois de ter o objeto Configuration, você poderá usar o método GetSection ou GetSectionGroup para analisar as configurações. O exemplo a seguir obtém uma referência às configurações de representação para o aplicativo ProductInfo acima:

Configuration config =
    WebConfigurationManager.OpenWebConfiguration("/ProductInfo);
IdentitySection section =
   (IdentitySection)config.GetSection("system.web/identity");

Gravando em arquivos de configuração ASP.NET

Assim como na leitura de arquivos de configuração, a classe WebConfigurationManager é o núcleo para gravar em Asp.NET arquivos de configuração. Também há três etapas para gravar em arquivos de configuração ASP.NET.

  1. Obtenha um objeto Configuration usando o método OpenWebConfiguration.
  2. Obtenha uma referência à seção desejada no arquivo de configuração.
  3. Escreva as informações desejadas do arquivo de configuração usando o método Save ou SaveAs.

O código a seguir altera o atributo de depuração do <elemento de compilação> para 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 esse código for executado, o atributo de depuração do elemento de <compilação> será definido como false para o arquivo web.config do aplicativo WebApp .

System.Web.Management Namespace

O namespace System.Web.Management fornece as classes e interfaces para gerenciar e monitorar a integridade de aplicativos ASP.NET.

O registro em log é realizado definindo uma regra que associa eventos a um provedor. A regra define o tipo de eventos enviados ao provedor. Os seguintes eventos base estão disponíveis para você registrar em log:

Webbaseevent A classe de evento base para todos os eventos. Contém as propriedades necessárias para todos os eventos, como código de evento, código de detalhes do evento, data e hora em que o evento foi gerado, número de sequência, a mensagem de evento e detalhes do evento.
Webmanagementevent A classe de evento base para eventos de gerenciamento, como tempo de vida do aplicativo, solicitação, erro e eventos de auditoria.
Webheartbeatevent O evento gerado pelo aplicativo em intervalos regulares para capturar informações úteis de estado de runtime.
Webauditevent A classe base para eventos de auditoria de segurança, que são usados para marcar condições como falha de autorização, falha de descriptografia etc.
Webrequestevent A classe base para todos os eventos de solicitação informativa.
Webbaseerrorevent A classe base para todos os eventos que indicam condições de erro.

Os tipos de provedores disponíveis permitem enviar saída de evento para Visualizador de Eventos, SQL Server, WMI (Instrumentação de Gerenciamento do Windows) e email. Os provedores pré-configurados e os mapeamentos de eventos reduzem a quantidade de trabalho necessária para obter a saída do evento registrada.

ASP.NET 2.0 usa o provedor de Log de Eventos pronto para registrar eventos com base em domínios de aplicativo iniciando e parando, bem como registrando exceções sem tratamento. Isso ajuda a cobrir alguns dos cenários básicos. Por exemplo, digamos que seu aplicativo gere uma exceção, mas o usuário não salva o erro e você não pode reproduzi-lo. Com a regra padrão do Log de Eventos, você poderá coletar as informações de exceção e pilha para ter uma ideia melhor de que tipo de erro ocorreu. Outro exemplo se aplica se o aplicativo está perdendo o estado da sessão. Nesse caso, você pode procurar no Log de Eventos para determinar se o domínio do aplicativo está reciclando e por que o domínio do aplicativo parou em primeiro lugar.

Além disso, o sistema de monitoramento de integridade é extensível. Por exemplo, você pode definir eventos personalizados da Web, acioná-los em seu aplicativo e, em seguida, definir uma regra para enviar as informações de evento para um provedor, como seu email. Isso permite que você vincule facilmente sua instrumentação aos provedores de monitoramento de integridade. Como outro exemplo, você pode disparar um evento sempre que um pedido for processado e configurar uma regra que envia cada evento para o banco de dados SQL Server. Você também pode disparar um evento quando um usuário falha ao fazer logon várias vezes seguidas e configurar o evento para usar os provedores baseados em email.

A configuração para os provedores e eventos padrão é armazenada no arquivo Web.config global. O arquivo de Web.config global armazena todas as configurações baseadas na Web que foram armazenadas no arquivo Machine.config em ASP.NET 1x. O arquivo de Web.config global está localizado no seguinte diretório:

%windir%\Microsoft.Net\Framework\v2.0.*\config\Web.config

A <seção healthMonitoring> do arquivo de Web.config global fornece configurações padrão. Você pode substituir essas configurações ou definir suas próprias configurações implementando a <seção healthMonitoring> no arquivo Web.config para seu aplicativo.

A <seção healthMonitoring> do arquivo de Web.config global contém os seguintes itens:

providers Contém provedores configurados para o Visualizador de Eventos, WMI e SQL Server.
Eventmappings Contém mapeamentos para as várias classes do WebBase. Você poderá estender essa lista se gerar sua própria classe de evento. Gerar sua própria classe de evento oferece granularidade mais fina sobre os provedores para os quais você envia informações. Por exemplo, você pode configurar exceções sem tratamento a serem enviadas para SQL Server, enviando seus próprios eventos personalizados para email.
rules Vincula eventMappings ao provedor.
Buffer Usado com SQL Server e provedores de email para determinar com que frequência liberar os eventos para o provedor.

Veja abaixo um exemplo de código do arquivo de Web.config global.

<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>

Como armazenar eventos para Visualizador de Eventos

Conforme mencionado anteriormente, o provedor para registrar eventos no Visualizador de Eventos está configurado para você no arquivo de Web.config global. Por padrão, todos os eventos baseados em WebBaseErrorEvent e WebFailureAuditEvent são registrados. Você pode adicionar regras adicionais para registrar informações adicionais no Log de Eventos. Por exemplo, se você quisesse registrar todos os eventos (ou seja, todos os eventos com base no WebBaseEvent), poderia adicionar a seguinte regra ao arquivo Web.config:

<healthMonitoring>
    <rules>
        <add name="All Events" eventName="All Events"
             provider="EventLogProvider" profile="Critical" />
    </rules>
</healthMonitoring>

Essa regra vincularia o mapa de eventos Todos os Eventos ao provedor de Log de Eventos. EventMapping e o provedor são incluídos no arquivo de Web.config global.

Como armazenar eventos para SQL Server

Esse método usa o banco de dados ASPNETDB , que é gerado pela ferramenta Aspnet_regsql.exe. O provedor padrão usa a cadeia de conexão LocalSqlServer, que usa um banco de dados baseado em arquivo na pasta App_data ou a instância local do SQLExpress de SQL Server. A cadeia de conexão LocalSqlServer e o SqlProvider são configurados no arquivo de Web.config global.

A cadeia de conexão LocalSqlServer no arquivo de Web.config global tem esta aparência:

<connectionStrings>
    <add name="LocalSqlServer"
         connectionString="data source=.\SQLEXPRESS;
         Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;
         User Instance=true"
         providerName="System.Data.SqlClient" />
</connectionStrings>

Se você quiser usar outra instância SQL Server, precisará usar a ferramenta Aspnet_regsql.exe, que pode ser encontrada na pasta %windir%\Microsoft.Net\Framework\v2.0.*. Use a ferramenta Aspnet_regsql.exe para gerar um banco de dados ASPNETDB personalizado na instância SQL Server, adicione a cadeia de conexão ao arquivo de configuração de aplicativos e adicione um provedor usando a nova cadeia de conexão. Depois de criar o banco de dados ASPNETDB , você precisará definir uma regra para vincular um eventMapping ao sqlProvider.

Se você usar o SqlProvider padrão ou configurar seu próprio provedor, precisará adicionar uma regra vinculando o provedor a um mapa de eventos. A regra a seguir vincula o novo provedor que você criou acima ao mapa de eventos Todos os Eventos . Essa regra registrará todos os eventos com base em WebBaseEvent e os enviará para o MySqlWebEventProvider que usará a cadeia de conexão MYASPNETDB. O código a seguir adiciona uma regra para vincular o provedor a um mapa de eventos:

<healthMonitoring>
    <rules>
        <add name="All Events" eventName="All Events"
        provider="MySqlWebEventProvider" profile="Critical"/>
    </rules>
</healthMonitoring>

Se você quisesse enviar apenas erros para SQL Server, poderia adicionar a seguinte regra:

<add name="All Errors"
    eventName="All Errors"
    provider="MySqlWebEventProvider"
    profile="Critical"/>

Como encaminhar eventos para o WMI

Você também pode encaminhar os eventos para o WMI. O provedor WMI está configurado para você no arquivo Web.config global por padrão.

O exemplo de código a seguir adiciona uma regra para encaminhar os eventos para o WMI:

<providers>
    <add name="WmiWebEventProvider"
      type="System.Web.Management.WmiWebEventProvider,System.Web,
         Version=2.0.0.0,Culture=neutral,
         PublicKeyToken=b03f5f7f11d50a3a" />
</providers>

Você precisará adicionar uma regra para associar um eventMapping ao provedor e também um aplicativo ouvinte WMI para escutar os eventos. O exemplo de código a seguir adiciona uma regra para vincular o provedor WMI ao mapa de eventos Todos os Eventos :

<rules>
    <add name="All Events"
      eventName="All Events" provider="WmiWebEventProvider"
        profile="Critical" />
</rules>

Como encaminhar eventos para email

Você também pode encaminhar eventos para o email. Tenha cuidado com quais regras de evento você mapeia para seu provedor de email, pois você pode enviar involuntariamente muitas informações que podem ser mais adequadas para SQL Server ou o Log de Eventos. Há dois provedores de email; SimpleMailWebEventProvider e TemplatedMailWebEventProvider. Cada um tem os mesmos atributos de configuração, com exceção dos atributos "template" e "detailedTemplateErrors", ambos disponíveis apenas no TemplatedMailWebEventProvider.

Observação

Nenhum desses provedores de email está configurado para você. Você precisará adicioná-los ao arquivo Web.config.

A main diferença entre esses dois provedores de email é que SimpleMailWebEventProvider envia emails em um modelo genérico que não pode ser modificado. O arquivo de exemplo Web.config adiciona esse provedor de email à lista de provedores configurados usando a seguinte regra:

<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"/>

A regra a seguir também é adicionada para vincular o provedor de email ao mapa de eventos Todos os Eventos :

<add name="All Events" eventName="All Events"
    provider="mySimple-mailWebEventProvider" profile="Critical"/>

Rastreamento do ASP.NET 2.0

Há três aprimoramentos importantes no rastreamento no ASP.NET 2.0.

  1. Funcionalidade de rastreamento integrado
  2. Acesso programático a mensagens de rastreamento
  3. Rastreamento aprimorado no nível do aplicativo

Funcionalidade de rastreamento integrado

Agora você pode rotear mensagens emitidas pela classe System.Diagnostics.Trace para ASP.NET saída de rastreamento e rotear mensagens emitidas por ASP.NET rastreamento para System.Diagnostics.Trace. Você também pode encaminhar ASP.NET eventos de instrumentação para System.Diagnostics.Trace. Essa funcionalidade é fornecida pelo novo atributo writeToDiagnosticsTrace do <elemento trace> . Quando esse valor booliano é verdadeiro, ASP.NET mensagens de rastreamento são encaminhadas para a infraestrutura de rastreamento System.Diagnostics para uso por todos os ouvintes registrados para exibir mensagens de rastreamento.

Acesso programático a mensagens de rastreamento

ASP.NET 2.0 permite o acesso programático a todas as mensagens de rastreamento por meio da classe TraceContextRecord e da coleção TraceRecords . A maneira mais eficiente de acessar mensagens de rastreamento é registrar um delegado TraceContextEventHandler (também novo no ASP.NET 2.0) para lidar com o novo evento TraceFinished . Em seguida, você pode percorrer as mensagens de rastreamento como desejar.

O exemplo de código a seguir ilustra isso:

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));
    }
}

No exemplo acima, faço loop pela coleção TraceRecords e, em seguida, gravo cada mensagem no fluxo de resposta.

Rastreamento de Application-Level aprimorado

O rastreamento no nível do aplicativo é aprimorado por meio da introdução do novo atributo mostRecent do <elemento trace> . Esse atributo especifica se a saída de rastreamento no nível do aplicativo mais recente é exibida e os dados de rastreamento mais antigos além dos limites indicados pelo requestLimit são descartados. Se false, os dados de rastreamento serão exibidos para solicitações até que o atributo requestLimit seja atingido.

ferramentas de linha de comando ASP.NET

Há várias ferramentas de linha de comando para ajudar na configuração de ASP.NET. ASP.NET desenvolvedores devem estar familiarizados com a ferramenta aspnet_regiis.exe. ASP.NET 2.0 fornece três outras ferramentas de linha de comando para ajudar na configuração.

As seguintes ferramentas de linha de comando estão disponíveis:

Ferramenta Uso
aspnet_regiis.exe Permite o registro de ASP.NET com o IIS. Há duas versões dessas ferramentas que são enviadas com ASP.NET 2.0, uma para sistemas de 32 bits (na pasta Framework) e outra para sistemas de 64 bits (na pasta Framework64). A versão de 64 bits não será instalada em um sistema operacional de 32 bits.
aspnet_regsql.exe A ferramenta ASP.NET SQL Server Registration é usada para criar um banco de dados do Microsoft SQL Server para uso pelos provedores de SQL Server em ASP.NET ou para adicionar ou remover opções de um banco de dados existente. O arquivo Aspnet_regsql.exe está localizado na pasta [drive:]\WINDOWS\Microsoft.NET\Framework\versionNumber no servidor Web.
aspnet_regbrowsers.exe A ferramenta ASP.NET Browser Registration analisa e compila todas as definições de navegador em todo o sistema em um assembly e instala o assembly no cache de assembly global. A ferramenta usa os arquivos de definição do navegador (. Arquivos BROWSER) do subdiretório .NET Framework Browsers. A ferramenta pode ser encontrada no diretório %SystemRoot%\Microsoft.NET\Framework\version\.
aspnet_compiler.exe A ferramenta ASP.NET Compilação permite compilar um aplicativo Web ASP.NET, seja no local ou para implantação em um local de destino, como um servidor de produção. A compilação in-loco ajuda o desempenho do aplicativo porque os usuários finais não encontram um atraso na primeira solicitação para o aplicativo enquanto o aplicativo é compilado.

Como a ferramenta aspnet_regiis.exe não é nova no ASP.NET 2.0, não discutiremos isso aqui.

Ferramenta de Registro ASP.NET SQL Server – aspnet_regsql.exe

Você pode definir vários tipos de opções usando a ferramenta ASP.NET SQL Server Registro. Você pode especificar uma conexão SQL, especificar quais ASP.NET serviços de aplicativos usam SQL Server para gerenciar informações, indicar qual banco de dados ou tabela é usado para dependência de cache SQL e adicionar ou remover suporte para usar SQL Server para armazenar procedimentos e estado de sessão.

Vários serviços de aplicativos ASP.NET dependem de um provedor para gerenciar o armazenamento e a recuperação de dados de uma fonte de dados. Cada provedor é específico para a fonte de dados. ASP.NET inclui um provedor de SQL Server para os seguintes recursos de ASP.NET:

Quando você instala ASP.NET, o arquivo Machine.config do servidor inclui elementos de configuração que especificam SQL Server provedores para cada um dos recursos de ASP.NET que dependem de um provedor. Esses provedores são configurados, por padrão, para se conectar a uma instância de usuário local do SQL Server Express 2005. Se você alterar a cadeia de conexão padrão usada pelos provedores, antes de poder usar qualquer um dos recursos ASP.NET configurados na configuração do computador, instale o banco de dados SQL Server e os elementos de banco de dados para o recurso escolhido usando Aspnet_regsql.exe. Se o banco de dados especificado com a ferramenta de registro SQL ainda não existir (aspnetdb será o banco de dados padrão se um não for especificado na linha de comando), o usuário atual deverá ter direitos para criar bancos de dados no SQL Server e criar elementos de esquema em um banco de dados.

Dependência do cache SQL

Um recurso avançado do cache de saída de ASP.NET é a dependência do cache SQL. A dependência do cache SQL dá suporte a dois modos de operação diferentes: um que usa uma implementação ASP.NET de sondagem de tabela e um segundo modo que usa os recursos de notificação de consulta do SQL Server 2005. A ferramenta de registro do SQL pode ser usada para configurar o modo de operação de sondagem de tabela.

Estado de sessão

Por padrão, os valores e as informações de estado da sessão são armazenados na memória dentro do processo de ASP.NET. Como alternativa, você pode armazenar dados de sessão em um banco de dados SQL Server, no qual eles podem ser compartilhados por vários servidores Web. Se o banco de dados que você especificar para o estado de sessão com a ferramenta de registro SQL ainda não existir, o usuário atual deverá ter direitos para criar bancos de dados no SQL Server, bem como para criar elementos de esquema em um banco de dados. Se o banco de dados existir, o usuário atual deverá ter direitos para criar elementos de esquema no banco de dados existente.

Para instalar o banco de dados de estado de sessão no SQL Server, execute a ferramenta Aspnet_regsql.exe e forneça as seguintes informações com o comando :

  • O nome da instância SQL Server, usando a opção -S.
  • As credenciais de logon de uma conta que tem permissão para criar um banco de dados em um computador executando SQL Server. Use a opção -E para usar o usuário conectado no momento ou use a opção -U para especificar uma ID de usuário junto com a opção -P para especificar uma senha.
  • A opção de linha de comando -ssadd para adicionar o banco de dados de estado de sessão.

Por padrão, você não pode usar a ferramenta Aspnet_regsql.exe para instalar o banco de dados de estado de sessão em um computador executando SQL Server 2005 Express Edition.

Ferramenta de Registro do Navegador ASP.NET – aspnet_regbrowsers.exe

No ASP.NET versão 1.1, o arquivo Machine.config continha uma seção chamada <browserCaps>. Esta seção continha uma série de entradas XML que definiam as configurações para vários navegadores com base em uma expressão regular. Para ASP.NET versão 2.0, um novo . O arquivo BROWSER define os parâmetros de um navegador específico usando entradas XML. Você adiciona informações em um novo navegador adicionando um novo . Arquivo BROWSER para a pasta localizada em %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers em seu sistema.

Como um aplicativo não está lendo um arquivo .config sempre que ele requer informações do navegador, você pode criar um novo . Arquivo BROWSER e execute Aspnet_regbrowsers.exe para adicionar as alterações necessárias ao assembly. Isso permite que o servidor acesse as novas informações do navegador imediatamente para que você não precise desligar nenhum de seus aplicativos para obter as informações. Um aplicativo pode acessar os recursos do navegador por meio da propriedade Browser do HttpRequest atual.

As seguintes opções estão disponíveis ao executar aspnet_regbrowser.exe:

Opção Descrição
-? Exibe o texto da Ajuda Aspnet_regbbrowsers.exe na janela de comando.
-i Cria o assembly de funcionalidades do navegador de runtime e o instala no cache de assembly global.
-u Desinstala o assembly de funcionalidades do navegador de runtime do cache de assembly global.

Ferramenta de Compilação ASP.NET – aspnet_compiler.exe

A ferramenta ASP.NET Compilação pode ser usada de duas maneiras gerais: para compilação in-loco e compilação para implantação, em que um diretório de saída de destino é especificado.

Compilando um aplicativo no local

A ferramenta de compilação ASP.NET pode compilar um aplicativo em vigor, ou seja, ele imita o comportamento de fazer várias solicitações para o aplicativo, causando assim a compilação regular. Os usuários de um site pré-compilado não sofrerão um atraso causado pela compilação da página na primeira solicitação.

Quando você pré-compila um site no local, os seguintes itens se aplicam:

  • O site mantém seus arquivos e estrutura de diretório.
  • Você deve ter compiladores para todas as linguagens de programação usadas pelo site no servidor.
  • Se algum arquivo falhar na compilação, todo o site falhará na compilação.

Você também pode recompilar um aplicativo em vigor depois de adicionar novos arquivos de origem a ele. A ferramenta compila apenas os arquivos novos ou alterados, a menos que você inclua a opção -c .

Observação

A compilação de um aplicativo que contém um aplicativo aninhado não compila o aplicativo aninhado. O aplicativo aninhado deve ser compilado separadamente.

Compilando um aplicativo para implantação

Você compila um aplicativo para implantação (compilação em um local de destino) especificando o parâmetro targetDir. O targetDir pode ser o local final para o aplicativo Web ou o aplicativo compilado pode ser implantado. Usar a opção -u compila o aplicativo de forma que você possa fazer alterações em determinados arquivos no aplicativo compilado sem recompilá-lo. Aspnet_compiler.exe faz uma distinção entre tipos de arquivo estáticos e dinâmicos e os manipula de forma diferente ao criar o aplicativo resultante.

  • Tipos de arquivo estáticos são aqueles que não têm um compilador ou provedor de build associado, como arquivos cujos nomeados têm extensões como .css, .gif, .htm, .html, .jpg, .js e assim por diante. Esses arquivos são simplesmente copiados para o local de destino, com seus locais relativos na estrutura de diretório preservados.
  • Tipos de arquivo dinâmicos são aqueles que têm um compilador ou provedor de build associado, incluindo arquivos com extensões de nome de arquivo específicas ASP.NET, como .asax, .ascx, .ashx, .aspx, .browser, . master, e assim por diante. A ferramenta de compilação ASP.NET gera assemblies desses arquivos. Se a opção -u for omitida, a ferramenta também criará arquivos com a extensão de nome de arquivo . COMPILADO que mapeia os arquivos de origem originais para o assembly. Para garantir que a estrutura de diretório da origem do aplicativo seja preservada, a ferramenta gera arquivos de espaço reservado nos locais correspondentes no aplicativo de destino.

Você deve usar a opção -u para indicar que o conteúdo do aplicativo compilado pode ser modificado. Caso contrário, as modificações subsequentes serão ignoradas ou causarão erros em tempo de execução.

A tabela a seguir descreve como a ferramenta ASP.NET Compilação lida com diferentes tipos de arquivo quando a opção -u é incluída.

Tipo de arquivo Ação do compilador
.ascx, .aspx, . master Esses arquivos são divididos em código-fonte e marcação, que inclui arquivos code-behind e qualquer código que esteja entre <os elementos de script runat="server> ". O código-fonte é compilado em assemblies, com nomes derivados de um algoritmo de hash e os assemblies são colocados no diretório Bin. Qualquer código embutido, ou seja, o código entre os < colchetes % e %> é incluído com marcação e não compilado. Novos arquivos com o mesmo nome que os arquivos de origem são criados para conter a marcação e colocados nos diretórios de saída correspondentes.
.ashx, .asmx Esses arquivos não são compilados e são movidos para os diretórios de saída como está e não são compilados. Se você quiser que o código do manipulador seja compilado, coloque o código em arquivos de código-fonte no diretório App_Code.
.cs, .vb, .jsl, .cpp (sem incluir arquivos code-behind para os tipos de arquivo listados anteriormente) Esses arquivos são compilados e incluídos como um recurso em assemblies que fazem referência a eles. Os arquivos de origem não são copiados para o diretório de saída. Se um arquivo de código não for referenciado, ele não será compilado.
Tipos de arquivo personalizados Esses arquivos não são compilados. Esses arquivos são copiados para os diretórios de saída correspondentes.
Arquivos de código-fonte no subdiretório App_Code Esses arquivos são compilados em assemblies e colocados no diretório Bin.
Arquivos .resx e .resource no subdiretório App_GlobalResources Esses arquivos são compilados em assemblies e colocados no diretório Bin. Nenhum subdiretório App_GlobalResources é criado no diretório de saída main e nenhum arquivo .resx ou .resources localizado no diretório de origem é copiado para os diretórios de saída.
Arquivos .resx e .resource no subdiretório App_LocalResources Esses arquivos não são compilados e são copiados para os diretórios de saída correspondentes.
Arquivos .skin no subdiretório App_Themes Os arquivos .skin e os arquivos de tema estáticos não são compilados e são copiados para os diretórios de saída correspondentes.
.browser Web.config tipos de arquivo estáticos Assemblies já presentes no diretório Bin Esses arquivos são copiados como estão para os diretórios de saída.

A tabela a seguir descreve como a ferramenta ASP.NET Compilação lida com diferentes tipos de arquivo quando a opção -u é omitida.

Tipo de arquivo Ação do compilador
.aspx, .asmx, .ashx, . master Esses arquivos são divididos em código-fonte e marcação, que inclui arquivos code-behind e qualquer código que esteja entre <os elementos de script runat="server> ". O código-fonte é compilado em assemblies, com nomes derivados de um algoritmo de hash. Os assemblies resultantes são colocados no diretório Bin. Qualquer código embutido, ou seja, o código entre os < colchetes % e %> é incluído com marcação e não compilado. O compilador cria novos arquivos para conter a marcação com o mesmo nome que os arquivos de origem. Esses arquivos resultantes são colocados no diretório Bin. O compilador também cria arquivos com o mesmo nome que os arquivos de origem, mas com a extensão . COMPILADO que contém informações de mapeamento. O. Arquivos COMPILADOs são colocados nos diretórios de saída correspondentes ao local original dos arquivos de origem.
.ascx Esses arquivos são divididos em marcação e código-fonte. O código-fonte é compilado em assemblies e colocado no diretório Bin, com nomes derivados de um algoritmo de hash. Nenhum arquivo de marcação é gerado.
.cs, .vb, .jsl, .cpp (sem incluir arquivos code-behind para os tipos de arquivo listados anteriormente) O código-fonte referenciado pelos assemblies gerados de arquivos .ascx, .ashx ou .aspx é compilado em assemblies e colocado no diretório Bin. Nenhum arquivo de origem é copiado.
Tipos de arquivo personalizados Esses arquivos são compilados como arquivos dinâmicos. Dependendo do tipo de arquivo no qual se baseiam, o compilador pode colocar arquivos de mapeamento nos diretórios de saída.
Arquivos no subdiretório App_Code Os arquivos de código-fonte neste subdiretório são compilados em assemblies e colocados no diretório Bin.
Arquivos no subdiretório App_GlobalResources Esses arquivos são compilados em assemblies e colocados no diretório Bin. Nenhum subdiretório App_GlobalResources é criado no diretório de saída main. Se o arquivo de configuração especificar appliesTo="All", os arquivos .resx e .resources serão copiados para os diretórios de saída. Eles não serão copiados se forem referenciados por um BuildProvider.
Arquivos .resx e .resource no subdiretório App_LocalResources Esses arquivos são compilados em assemblies com nomes exclusivos e colocados no diretório Bin. Nenhum arquivo .resx ou .resource é copiado para os diretórios de saída.
Arquivos .skin no subdiretório App_Themes Os temas são compilados em assemblies e colocados no diretório Bin. Os arquivos Stub são criados para arquivos .skin e colocados no diretório de saída correspondente. Arquivos estáticos (como .css) são copiados para os diretórios de saída.
.browser Web.config tipos de arquivo estáticos Assemblies já presentes no diretório Bin Esses arquivos são copiados como estão no diretório de saída.

Nomes de assembly fixos

Alguns cenários, como a implantação de um aplicativo Web usando o Instalador do Windows MSI, exigem o uso de nomes de arquivo e conteúdo consistentes, bem como estruturas de diretório consistentes para identificar assemblies ou configurações de configuração para atualizações. Nesses casos, você pode usar a opção -fixednames para especificar que a ferramenta ASP.NET Compilação deve compilar um assembly para cada arquivo de origem em vez de usar o em que várias páginas são compiladas em assemblies. Isso pode levar a um grande número de assemblies, portanto, se você estiver preocupado com a escalabilidade, deverá usar essa opção com cuidado.

Compilação de nome forte

As opções -aptca, -delaysign, -keycontainer e -keyfile são fornecidas para que você possa usar Aspnet_compiler.exe para criar assemblies fortemente nomeados sem usar a Ferramenta de Nome Forte (Sn.exe) separadamente. Essas opções correspondem, respectivamente, a AllowPartiallyTrustedCallersAttribute, AssemblyDelaySignAttribute, AssemblyKeyNameAttribute e AssemblyKeyFileAttribute.

A discussão desses atributos está fora do escopo deste curso.

Laboratórios

Cada um dos laboratórios a seguir se baseia nos laboratórios anteriores. Você precisará fazê-los em ordem.

Laboratório 1: Usando a API de Configuração

  1. Crie um novo site chamado mod9lab.
  2. Adicione um novo Arquivo de Configuração da Web ao site.
  3. Adicione o seguinte ao arquivo web.config:
<authorization>
    <deny users="?"/>
</authorization>

<identity impersonate="true"/>

Isso garantirá que você tenha permissão para salvar alterações no arquivo web.config.

  1. Adicione um novo controle Label a Default.aspx e altere a ID para lblDebugStatus.
  2. Adicione um novo controle Button a Default.aspx.
  3. Altere a ID do controle Button para btnToggleDebug e o Texto para Alternar Status de Depuração.
  4. Abra a Exibição de Código para o arquivo code-behind de Default.aspx e adicione uma instrução using para System.Web.Configuration da seguinte maneira:
using System.Web.Configuration;
  1. Adicione duas variáveis privadas à classe e um método Page_Init, conforme mostrado abaixo:
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;
    }
}
  1. Adicione o seguinte código ao Page_Load:
lblDebugStatus.Text = "Debug set to: " + _debugStatus.ToString();
  1. Salve e navegue por default.aspx. Observe que o controle Rótulo exibe o status de depuração atual.
  2. Clique duas vezes no controle Botão no designer e adicione o seguinte código ao evento Clique para o controle Botão:
compilation.Debug = !_debugStatus;
config.Save();
lblDebugStatus.Text = "Debug set to: " + compilation.Debug.ToString();
  1. Salve e procure default.aspx e clique no botão .
  2. Abra o arquivo web.config depois que cada botão clicar e observar o atributo de depuração na <seção de compilação> .

Laboratório 2: Registro em log de reinicializações de aplicativos

Neste laboratório, você criará um código que permitirá alternar o log de desligamentos, inicializações e recompilações de aplicativos no Visualizador de Eventos.

  1. Adicione um DropDownList a default.aspx e altere a ID para ddlLogAppEvents.
  2. Defina a propriedade AutoPostBack para DropDownList como true.
  3. Adicione três itens à coleção Items para o DropDownList. Faça o Texto para o primeiro item Selecionar Valor e o valor -1. Torne o Texto e o Valor do segundo item True e o Texto e o Valor do terceiro item False.
  4. Adicione um novo Rótulo a default.aspx. Altere a ID para lblLogAppEvents.
  5. Abra a exibição code-behind para default.aspx e adicione uma nova declaração para uma variável do tipo HealthMonitoringSection, conforme mostrado abaixo:
public partial class _Default : System.Web.UI.Page {
    private bool _debugStatus;
    private CompilationSection compilation;
    private Configuration config;

    // new variable below
    private HealthMonitoringSection health;
}
  1. Adicione o seguinte código ao código existente no Page_Init:
health = (HealthMonitoringSection)config.GetSection("system.web/healthMonitoring");
  1. Clique duas vezes no DropDownList e adicione o seguinte código ao 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();
    }
}
  1. Navegue por default.aspx.

  2. Defina a lista suspensa como False.

  3. Desmarque o log do aplicativo no Visualizador de Eventos.

  4. Clique no botão para alterar o atributo Depurar para o aplicativo.

  5. Atualize o log do aplicativo no Visualizador de Eventos.

    1. Algum evento foi registrado?
    2. Por quê?
  6. Defina a lista suspensa como True.

  7. Clique no botão para alternar o atributo Depurar para o aplicativo.

  8. Atualize o logon do aplicativo no Visualizador de Eventos.

    1. Algum evento foi registrado?
    2. Qual foi o motivo do desligamento do aplicativo?
  9. Experimente ativar e desativar o registro em log e examine as alterações feitas no arquivo web.config.

Obter mais informações:

ASP.NET modelo provedor 2.0 permite que você crie seus próprios provedores não apenas para instrumentação de aplicativos, mas para muitos outros usos, como Associação, Perfis etc. Para obter informações detalhadas sobre como gravar um provedor personalizado para registrar eventos de aplicativo em um arquivo de texto, visite este link.