Configuración e instrumentación

por Microsoft

Nota:

Desde que se escribió este artículo, los proveedores de pertenencia de ASP.NET se han reemplazado por ASP.NET Identity. Se recomienda encarecidamente actualizar las aplicaciones para usar la plataforma ASP.NET Identity en lugar de los proveedores de pertenencia destacados en el momento en que se escribió este artículo. ASP.NET Identity tiene una serie de ventajas sobre el sistema de pertenencia ASP.NET, incluidas las siguientes:

  • Mejor rendimiento
  • Extensibilidad y capacidad de prueba mejoradas
  • Admite OAuth, OpenID Connect y autenticación en dos fases
  • Admite identidades basadas en notificaciones
  • Mejor interoperabilidad con ASP.Net Core

Hay cambios importantes en la configuración y la instrumentación en ASP.NET 2.0. La nueva API de configuración de ASP.NET permite realizar cambios de configuración mediante programación. Además, existen muchas nuevas opciones de configuración que permiten nuevas configuraciones e instrumentación.

Hay cambios importantes en la configuración y la instrumentación en ASP.NET 2.0. La nueva API de configuración de ASP.NET permite realizar cambios de configuración mediante programación. Además, existen muchas nuevas opciones de configuración que permiten nuevas configuraciones e instrumentación.

En este módulo, analizaremos la API de configuración de ASP.NET en lo que se refiere a la lectura y escritura en archivos de configuración de ASP.NET, y también cubriremos la instrumentación de ASP.NET. También hablaremos sobre las nuevas funciones disponibles en el seguimiento de ASP.NET.

API de configuración de ASP.NET

La API de configuración de ASP.NET permite desarrollar, implementar y administrar datos de configuración de aplicaciones mediante una única interfaz de programación. Puede utilizar la API de configuración para desarrollar y modificar configuraciones completas de ASP.NET mediante programación sin editar directamente el XML en los archivos de configuración. Además, puede usar la API de configuración en aplicaciones y scripts de consola que desarrolle, en herramientas de administración basadas en web y en complementos de Microsoft Management Console (MMC).

Las siguientes dos herramientas de administración de configuración utilizan la API de configuración y se incluyen con la versión 2.0 de .NET Framework:

  • El complemento MMC de ASP.NET, que usa la API de configuración para simplificar las tareas administrativas, lo que proporciona una vista integrada de los datos de configuración local de todos los niveles de la jerarquía de configuración.
  • La herramienta de administración de sitios web, que permite administrar las opciones de configuración de las aplicaciones locales y remotas, incluidos los sitios hospedados.

La API de configuración de ASP.NET consta de un conjunto de objetos de administración de ASP.NET que puede usar para configurar sitios web y aplicaciones mediante programación. Los objetos de administración se implementan como una biblioteca de clases de .NET Framework. El modelo de programación de la API de configuración ayuda a garantizar la coherencia y confiabilidad del código aplicando tipos de datos en tiempo de compilación. Para facilitar la administración de las configuraciones de la aplicación, la API de configuración permite ver los datos que se combinan desde todos los puntos de la jerarquía de configuración como una sola colección, en lugar de ver los datos como colecciones independientes de diferentes archivos de configuración. Además, la API de configuración permite manipular configuraciones de aplicación completas sin editar directamente el XML en los archivos de configuración. Por último, la API simplifica las tareas de configuración al admitir herramientas administrativas, como la herramienta de administración del sitio web. La API de configuración simplifica la implementación al admitir la creación de archivos de configuración en un equipo y ejecutar scripts de configuración en varios equipos.

Nota:

La API de configuración no admite la creación de aplicaciones IIS.

Trabajar con opciones de configuración local y remota

Un objeto Configuration representa la vista combinada de los valores de configuración que se aplican a una entidad física específica, como un equipo, o a una entidad lógica, como una aplicación o un sitio web. La entidad lógica especificada puede existir en el equipo local o en un servidor remoto. Cuando no existe ningún archivo de configuración para una entidad especificada, el objeto Configuration representa los valores de configuración predeterminados definidos por el archivo Machine.config.

Puede obtener el objeto Configuration mediante uno de los métodos de configuración abiertos de las siguientes clases:

  1. La clase ConfigurationManager, si la entidad es una aplicación cliente.
  2. La clase WebConfigurationManager, si la entidad es una aplicación web.

Estos métodos devolverán el objeto Configuration, que a su vez proporciona los métodos y propiedades necesarios para controlar los archivos de configuración subyacentes. Puede acceder a estos archivos para leer o escribir.

Lectura

Use el método GetSection o GetSectionGroup para leer información de configuración. El usuario o proceso que lee debe tener permisos de lectura en todos los archivos de configuración de la jerarquía.

Nota:

Si utiliza un método GetSection estático que toma un parámetro de ruta de acceso, el parámetro de ruta de acceso debe hacer referencia a la aplicación en la que se ejecuta el código. De lo contrario, se omite el parámetro y se devuelve la información de configuración de la aplicación que se está ejecutando actualmente.

Escritura

Utilice uno de los métodos Save para escribir información de configuración. El usuario o proceso que escribe debe tener permisos de escritura en el archivo de configuración y el directorio en el nivel de jerarquía de configuración actual, así como permisos de lectura en todos los archivos de configuración de la jerarquía.

Para generar un archivo de configuración que represente los valores de configuración heredados para una entidad especificada, use uno de los siguientes métodos Configuration.Save:

  1. Método Save para crear un nuevo archivo de configuración.
  2. Método SaveAs para generar un nuevo archivo de configuración en otra ubicación.

Clases de configuración y espacios de nombres

Muchas clases y métodos de configuración son similares entre sí. En la tabla siguiente se describen las clases de configuración y los espacios de nombres más usados.

Clase de configuración o espacio de nombres Descripción
Espacio de nombres System.Configuration Contiene las clases de configuración principales para todas las aplicaciones de .NET Framework. Las clases de controlador de sección se usan para obtener datos de configuración para una sección de métodos, como GetSection y GetSectionGroup. Estos dos métodos no son estáticos.
Clase System.Configuration.Configuration Representa un conjunto de datos de configuración para un equipo, una aplicación, un directorio web u otro recurso. Esta clase contiene métodos útiles, como GetSection y GetSectionGroup, para actualizar los valores de configuración y obtener referencias a secciones y grupos de secciones. Esta clase se usa como tipo de valor devuelto para los métodos que obtienen datos de configuración en tiempo de diseño, como los métodos de las clases WebConfigurationManager y ConfigurationManager.
Espacio de nombres System.Web.Configuration Contiene las clases de controlador de sección para las secciones de configuración de ASP.NET definidas en los valores de configuración de ASP.NET. Las clases de controlador de sección se usan para obtener datos de configuración para una sección de métodos, como GetSection y GetSectionGroup.
Clase System.Web.Configuration.WebConfigurationManager Proporciona métodos útiles para obtener referencias a los valores de configuración en tiempo de ejecución y tiempo de diseño. Estos métodos usan la clase System.Configuration.Configuration como tipo de valor devuelto. Puede utilizar el método estático GetSection de esta clase o el método no estático GetSection de la clase System.Configuration.ConfigurationManager indistintamente. Para las configuraciones de aplicaciones web, se recomienda la clase System.Web.Configuration.WebConfigurationManager en lugar de la clase System.Configuration.ConfigurationManager.
Espacio de nombres System.Configuration.Provider Proporciona una manera de personalizar y ampliar el proveedor de configuración. Esta es la clase base para todas las clases de proveedor del sistema de configuración.
Espacio de nombres System.Web.Management Contiene clases e interfaces para administrar y supervisar el estado de las aplicaciones web. En términos estrictos, este espacio de nombres no se considera parte de la API de configuración. Por ejemplo, las clases de este espacio de nombres realizan el seguimiento y la activación de eventos.
Espacio de nombres System.Management.Instrumentation Proporciona las clases necesarias para que la instrumentación de aplicaciones exponga su información de administración y eventos a través de Instrumental de administración de Windows (WMI) a los consumidores potenciales. El seguimiento de estado de ASP.NET utiliza WMI para entregar eventos. En términos estrictos, este espacio de nombres no se considera parte de la API de configuración.

Lectura de archivos de configuración de ASP.NET

La clase WebConfigurationManager es la clase principal para leer archivos de configuración de ASP.NET. Básicamente, hay tres pasos para leer los archivos de configuración de ASP.NET:

  1. Obtenga el objeto Configuration mediante el método OpenWebConfiguration.
  2. Obtenga una referencia a la sección deseada en el archivo de configuración.
  3. Lea la información deseada del archivo de configuración.

El objeto Configuration no representa un archivo de configuración determinado. En su lugar, representa una vista combinada de la configuración de un equipo, una aplicación o un sitio web. En el ejemplo de código siguiente se crea una instancia del objeto Configuration que representa la configuración de una aplicación web denominada ProductInfo.

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

Nota:

Tenga en cuenta que si la ruta de acceso /ProductInfo no existe, el código anterior devolverá la configuración predeterminada tal como se especifica en el archivo machine.config.

Una vez que tenga el objeto Configuration, puede usar el método GetSection o GetSectionGroup para profundizar en las opciones de configuración. En el ejemplo siguiente se obtiene una referencia a la configuración de suplantación de la aplicación ProductInfo anterior:

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

Escritura en archivos de configuración de ASP.NET

Al igual que en la lectura de archivos de configuración, la clase WebConfigurationManager es el núcleo para escribir en los archivos de configuración de Asp.NET. También hay tres pasos para escribir en los archivos de configuración de ASP.NET.

  1. Obtenga el objeto Configuration mediante el método OpenWebConfiguration.
  2. Obtenga una referencia a la sección deseada en el archivo de configuración.
  3. Escriba la información deseada del archivo de configuración mediante el método Save o SaveAs.

El siguiente código cambia el atributo debug (depurar) del elemento <compilation> (compilación) a 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!");
}

Cuando se ejecuta el código, el atributo debug del elemento <compilation> se establecerá en false para el archivo Web.config de la aplicación webApp.

Espacio de nombres System.Web.Management

El espacio de nombres System.Web.Management proporciona las clases e interfaces para administrar y darle seguimiento al estado de las aplicaciones ASP.NET.

El registro se realiza mediante la definición de una regla que asocia eventos a un proveedor. La regla define el tipo de eventos que se envían al proveedor. Los siguientes eventos base están disponibles para registrar:

WebBaseEvent Clase de eventos base para todos los eventos. Contiene las propiedades necesarias para todos los eventos, como el código de evento, el código de detalle del evento, la fecha y la hora en que se generó el evento, el número de secuencia, el mensaje del evento y los detalles del evento.
WebManagementEvent La clase de eventos base para eventos de administración, como la duración de la aplicación, la solicitud, el error y los eventos de auditoría.
WebHeartbeatEvent Evento generado por la aplicación en intervalos regulares para capturar información útil de estado en tiempo de ejecución.
WebAuditEvent La clase base para eventos de auditoría de seguridad, que se utilizan para marcar condiciones como errores de autorización y errores de descifrado, etc.
WebRequestEvent Clase base para todos los eventos de solicitud informativos.
WebBaseErrorEvent Clase base para todos los eventos que indican condiciones de error.

Los tipos de proveedores disponibles permiten enviar la salida de eventos al Visor de eventos, SQL Server, Instrumental de administración de Windows (WMI) y correo electrónico. Los proveedores y asignaciones de eventos preconfigurados reducen la cantidad de trabajo necesario para obtener la salida del evento registrada.

ASP.NET 2.0 usa el proveedor de registro de eventos de fábrica para registrar eventos basados en el inicio y la detención de los dominios de aplicación, así como para registrar cualquier excepción no controlada. Esto ayuda a cubrir algunos de los escenarios básicos. Por ejemplo, supongamos que la aplicación produce una excepción, pero el usuario no guarda el error y no se puede reproducir. Con la regla de registro de eventos predeterminada, podría recopilar la información de excepción y pila para obtener una mejor idea de qué tipo de error se produjo. Es otro el ejemplo que aplica si la aplicación pierde el estado de sesión. En ese caso, puede buscar en el registro de eventos para determinar si el dominio de aplicación se está reciclando y por qué el dominio de aplicación se detuvo en primer lugar.

Además, el sistema de seguimiento de estado es extensible. Por ejemplo, puede definir eventos web personalizados, desencadenarlos dentro de la aplicación y, a continuación, definir una regla para enviar la información del evento a un proveedor como el correo electrónico. Esto le permite vincular fácilmente la instrumentación a los proveedores de seguimiento de estado. Como otro ejemplo, podría desencadenar un evento cada vez que se procesa un pedido y configurar una regla que envíe cada evento a la base de datos de SQL Server. También puede desencadenar un evento cuando un usuario no puede iniciar sesión varias veces en una fila y configurar el evento para usar los proveedores basados en correo electrónico.

La configuración de los proveedores y eventos predeterminados se almacena en el archivo Web.config global. El archivo Web.config global almacena todos los valores basados en web que se almacenaron en el archivo Machine.config en ASP.NET 1x. El archivo Web.config global se encuentra en el directorio siguiente:

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

La sección <healthMonitoring> del archivo global Web.config proporciona valores de configuración predeterminados. Puede invalidar estas configuraciones o configurar sus propios valores implementando la sección <healthMonitoring> en el archivo Web.config de la aplicación.

La sección <healthMonitoring> del archivo Web.config global contiene los siguientes elementos:

providers Contiene proveedores configurados para el Visor de eventos, WMI y SQL Server.
eventMappings Contiene asignaciones para las distintas clases de WebBase. Puede ampliar esta lista si genera su propia clase de eventos. La generación de su propia clase de eventos proporciona una granularidad más precisa sobre los proveedores a los que envía información. Por ejemplo, puede configurar excepciones no controladas para enviarse a SQL Server, al mismo tiempo que envía sus propios eventos personalizados al correo electrónico.
rules Vincula eventMappings al proveedor.
Almacenamiento en búfer Se usa con SQL Server y proveedores de correo electrónico para determinar la frecuencia de vaciado de los eventos en el proveedor.

A continuación se muestra un ejemplo de código del archivo 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>

Cómo almacenar eventos en el Visor de eventos

Como se mencionó anteriormente, el proveedor para registrar eventos en el Visor de eventos está configurado para usted en el archivo Web.config global. De forma predeterminada, todos los eventos basados en WebBaseErrorEvent y WebFailureAuditEvent son registrados. Puede agregar más reglas para registrar información adicional en el registro de eventos. Por ejemplo, si desea registrar todos los eventos (es decir, cada evento basado en WebBaseEvent), puede agregar la siguiente regla a su archivo Web.config:

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

Esta regla vinculará la asignación de eventos de Todos los eventos con el proveedor de registro de eventos. Tanto eventMapping como el proveedor se incluyen en el archivo Web.config global.

Cómo almacenar eventos en SQL Server

Este método utiliza la base de datos ASPNETDB, que es generada por la herramienta Aspnet_regsql.exe. El proveedor predeterminado usa la cadena de conexión LocalSqlServer, que usa una base de datos basada en archivos en la carpeta App_data o la instancia SQLExpress local de SQL Server. Tanto la cadena de conexión LocalSqlServer como SqlProvider se configuran en el archivo Web.config global.

La cadena de conexión LocalSqlServer del archivo Web.config global tiene este aspecto:

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

Si desea usar otra instancia de SQL Server, deberá usar la herramienta Aspnet_regsql.exe, que se puede encontrar en la carpeta %windir%\Microsoft.Net\Framework\v2.0.*. Utilice la herramienta Aspnet_regsql.exe para generar la base de datos ASPNETDB personalizada en la instancia SQL Server y, a continuación, agregue la cadena de conexión al archivo de configuración de la aplicación y luego agregue un proveedor usando la nueva cadena de conexión. Una vez creada la base de datos ASPNETDB, deberá establecer una regla para vincular eventMapping a SqlProvider.

Tanto si utiliza SqlProvider como si configura su propio proveedor, deberá agregar una regla que vincule el proveedor con un mapa de eventos. La siguiente regla vincula el nuevo proveedor que creó anteriormente con la asignación de eventos de Todos los eventos. Esta regla registrará todos los eventos basados en WebBaseEvent y los enviará a MySqlWebEventProvider que usará la cadena de conexión MYASPNETDB. El código siguiente agrega una regla para vincular el proveedor con un mapa de eventos:

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

Si solo desea enviar errores a SQL Server, puede agregar la siguiente regla:

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

Cómo reenviar eventos a WMI

También puede reenviar eventos a WMI. El proveedor WMI está configurado para usted en el archivo Web.config global de forma predeterminada.

En el siguiente ejemplo de código se agrega una regla para reenviar eventos a WMI:

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

Tendrá que agregar una regla para asociar un eventMapping al proveedor y también una aplicación de escucha WMI para escuchar los eventos. En el siguiente ejemplo de código se agrega una regla para vincular el proveedor WMI a la asignación de eventos de Todos los eventos:

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

Cómo desviar eventos al correo electrónico

También puede desviar eventos al correo electrónico. Tenga cuidado con las reglas de eventos que asigne a su proveedor de correo electrónico, ya que puede enviarse de forma involuntaria una gran cantidad de información que puede ser más adecuada para SQL Server o el registro de eventos. Hay dos proveedores de correo electrónico; SimpleMailWebEventProvider y TemplatedMailWebEventProvider. Cada uno tiene los mismos atributos de configuración, a excepción de los atributos "template" y "detailedTemplateErrors", que solo están disponibles en TemplatedMailWebEventProvider.

Nota:

Ninguno de estos proveedores de correo electrónico está configurado para usted. Deberá agregarlos al archivo Web.config.

La principal diferencia entre estos dos proveedores de correo electrónico es que SimpleMailWebEventProvider envía correos electrónicos en una plantilla genérica que no se puede modificar. El archivo Web.config de ejemplo agrega este proveedor de correo electrónico a la lista de proveedores configurados mediante la siguiente regla:

<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 siguiente regla también se agrega para vincular el proveedor de correo electrónico a la asignación de eventos de Todos los eventos:

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

Seguimiento de ASP.NET 2.0

Hay tres mejoras importantes para el seguimiento en ASP.NET 2.0.

  1. Funcionalidad de seguimiento integrada
  2. Acceso mediante programación a mensajes de seguimiento
  3. Seguimiento mejorado en el nivel de aplicación

Funcionalidad de seguimiento integrada

Ahora puede enrutar los mensajes emitidos por la clase System.Diagnostics.Trace al resultado de seguimiento de ASP.NET y enrutar los mensajes emitidos por el seguimiento de ASP.NET a System.Diagnostics.Trace. También puede desviar eventos de instrumentación ASP.NET a System.Diagnostics.Trace. Esta funcionalidad es proporcionada por el nuevo atributo writeToDiagnosticsTrace del elemento <de seguimiento>. Cuando este valor booleano es true, los mensajes de seguimiento de ASP.NET se desvían a la infraestructura de seguimiento de System.Diagnostics para que los agentes de escucha registrados los utilicen para mostrar mensajes de seguimiento.

Acceso mediante programación a mensajes de seguimiento

ASP.NET 2.0 permite el acceso mediante programación a todos los mensajes de seguimiento mediante la clase TraceContextRecord y la colección TraceRecords. La forma más eficaz de acceder a los mensajes de seguimiento es registrar un delegado TraceContextEventHandler (también nuevo en ASP.NET 2.0) para controlar el evento TraceFinished nuevo. A continuación, puede recorrer los mensajes de seguimiento como desee.

En el siguiente ejemplo de código se muestra lo siguiente:

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

En el ejemplo anterior, se muestra un recorrido por la colección TraceRecords y, a continuación, la escritura de cada mensaje en el flujo de Respuesta.

Seguimiento mejorado en el nivel de aplicación

El seguimiento en el nivel de aplicación se mejora mediante la introducción del nuevo atributo mostRecent del elemento <de seguimiento>. Este atributo especifica si se muestra el resultado de seguimiento en el nivel de aplicación más reciente y si se descartan los datos de seguimiento más antiguos que superen los límites indicados por requestLimit. Si es false, los datos de seguimiento se muestran para las solicitudes hasta que se alcanza el atributo requestLimit.

Herramientas de línea de comandos de ASP.NET

Hay varias herramientas de línea de comandos que ayudan a configurar ASP.NET. Los desarrolladores ASP.NET deben estar familiarizados con la herramienta aspnet_regiis.exe. ASP.NET 2.0 proporciona otras tres herramientas de línea de comandos para ayudar en la configuración.

Están disponibles las siguientes herramientas de línea de comandos:

Herramienta Usar
aspnet_regiis.exe Permite el registro de ASP.NET con IIS. Hay dos versiones de estas herramientas que se incluyen con ASP.NET 2.0, una para sistemas de 32 bits (en la carpeta Framework) y otra para sistemas de 64 bits (en la carpeta Framework64). La versión de 64 bits no se instalará en un sistema operativo de 32 bits.
aspnet_regsql.exe La herramienta de registro de SQL Server ASP.NET se usa para crear una base de datos de Microsoft SQL Server para usarla por los proveedores de SQL Server en ASP.NET, o para agregar o quitar opciones de una base de datos existente. El archivo Aspnet_regsql.exe file lo puede encontrar en la carpeta [drive:]\WINDOWS\Microsoft.NET\Framework\versionNumber en el servidor web.
aspnet_regbrowsers.exe La herramienta de registro de exploradores de ASP.NET analiza y compila todas las definiciones de explorador para todo el sistema en un ensamblado e instala el ensamblado en la caché global de ensamblados. La herramienta utiliza los archivos de definición del explorador (archivos .BROWSER) del subdirectorio de exploradores de .NET Framework. La herramienta se puede encontrar en el directorio %SystemRoot%\Microsoft.NET\Framework\version\.
aspnet_compiler.exe La herramienta de compilación de ASP.NET le permite compilar una aplicación web de ASP.NET, ya sea local o para implementarla en una ubicación de destino, como un servidor de producción. La compilación local ayuda al rendimiento de la aplicación porque los usuarios finales no encuentran un retraso en la primera solicitud a la aplicación mientras se compila la aplicación.

Dado que la herramienta aspnet_regiis.exe no es nueva en ASP.NET 2.0, no lo analizaremos aquí.

Herramienta de registro de SQL Server de ASP.NET: aspnet_regsql.exe

Puede establecer varios tipos de opciones mediante la herramienta de registro de SQL Server de ASP.NET. Puede especificar una conexión SQL, especificar qué servicios de aplicaciones ASP.NET usan SQL Server para administrar información, indicar qué base de datos o tabla se usa para la dependencia de caché de SQL y agregar o quitar compatibilidad para usar SQL Server para almacenar procedimientos y estado de sesión.

Varios servicios de aplicaciones de ASP.NET dependen de un proveedor para administrar el almacenamiento y la recuperación de datos de un origen de datos. Cada proveedor es específico del origen de datos. ASP.NET incluye un proveedor de SQL Server para las siguientes características de ASP.NET:

Al instalar ASP.NET, el archivo Machine.config del servidor incluye elementos de configuración que especifican proveedores de SQL Server para cada una de las características de ASP.NET que dependen de un proveedor. Estos proveedores se configuran de forma predeterminada para conectarse a una instancia de usuario local de SQL Server Express 2005. Si cambia la cadena de conexión predeterminada usada por los proveedores, antes de poder usar cualquiera de las características de ASP.NET configuradas en la configuración de la máquina, debe instalar la base de datos de SQL Server y los elementos de base de datos de la característica elegida mediante Aspnet_regsql.exe. Si la base de datos especificada con la herramienta de registro de SQL aún no existe (aspnetdb será la base de datos predeterminada, si no se especifica una en la línea de comandos), el usuario actual debe tener derechos para crear bases de datos en SQL Server, así como para crear elementos de esquema dentro de una base de datos.

Dependencia de memoria caché de SQL

Una característica avanzada del almacenamiento en caché de resultados de ASP.NET es la dependencia del caché de SQL. La dependencia de caché de SQL admite dos modos diferentes de funcionamiento: uno que usa una implementación de ASP.NET de sondeo de tablas y un segundo modo que usa las características de notificación de consulta de SQL Server 2005. La herramienta de registro de SQL se puede usar para configurar el modo de operación de sondeo de tabla.

Estado de sesión

De forma predeterminada, los valores de estado de sesión y la información se almacenan en memoria dentro del proceso de ASP.NET. Como alternativa, puede almacenar datos de sesión en una base de datos de SQL Server, donde varios servidores web pueden compartirlos. Si la base de datos especificada para el estado de sesión con la herramienta de registro de SQL aún no existe, el usuario actual debe tener derechos para crear bases de datos en SQL Server, así como para crear elementos de esquema dentro de una base de datos. Si la base de datos existe, el usuario actual debe tener derechos para crear elementos de esquema en la base de datos existente.

Para instalar la base de datos de estado de sesión en SQL Server, ejecute la herramienta Aspnet_regsql.exe y proporcione la siguiente información con el comando:

  • Nombre de la instancia de SQL Server mediante la opción -S.
  • Credenciales de inicio de sesión de una cuenta que tiene permiso para crear una base de datos en un equipo que ejecuta SQL Server. Utilice la opción -E para utilizar el usuario que actualmente ha iniciado sesión, o utilice la opción -U para especificar un Id. de usuario junto con la opción -P para especificar una contraseña.
  • La opción de línea de comandos -ssadd para agregar la base de datos de estado de sesión.

De forma predeterminada, no puede usar la herramienta Aspnet_regsql.exe para instalar la base de datos de estado de sesión en un equipo que ejecute SQL Server 2005 Express Edition.

Herramienta de registro de exploradores de ASP.NET: aspnet_regbrowsers.exe

En ASP.NET versión 1.1, el archivo Machine.config contenía una sección llamada <browserCaps>. Esta sección contenía una serie de entradas XML que definieron las configuraciones de varios exploradores en función de una expresión regular. Para ASP.NET versión 2.0, un nuevo archivo .BROWSER define los parámetros de un explorador determinado mediante entradas XML. Para agregar información a un nuevo explorador, agregue un nuevo archivo .BROWSER en la carpeta ubicada en %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browser en el sistema.

Dado que una aplicación no lee un archivo .config cada vez que requiere información del explorador, puede crear un nuevo archivo .BROWSER y ejecutar Aspnet_regbrowsers.exe para agregar los cambios necesarios al ensamblado. Esto permite que el servidor acceda inmediatamente a la nueva información del explorador para que no tenga que apagar ninguna de las aplicaciones para recoger la información. Una aplicación puede acceder a las funcionalidades del explorador a través de la propiedad Browser del HttpRequest actual.

Las siguientes opciones están disponibles al ejecutar aspnet_regbrowser.exe:

Opción Descripción
-? Muestra el texto de ayuda Aspnet_regbbrowsers.exe en la ventana de comandos.
-i Crea el ensamblado de funcionalidades del explorador en tiempo de ejecución y lo instala en la caché global de ensamblados.
-u Desinstala el ensamblado de funcionalidades del explorador runtime de la caché global de ensamblados.

Herramienta de compilación de ASP.NET: aspnet_compiler.exe

La herramienta de compilación de ASP.NET se puede usar de dos maneras generales: para la compilación local y la compilación de implementación, donde se especifica un directorio de salida de destino.

Compilación local de una aplicación

La herramienta de compilación de ASP.NET puede compilar localmente una aplicación, es decir, imita el comportamiento de realizar varias solicitudes a la aplicación, lo que provoca una compilación normal. Los usuarios de un sitio precompilado no experimentarán un retraso causado por compilar la página en la primera solicitud.

En el precompilado local de un sitio, se aplican los siguientes elementos:

  • El sitio conserva sus archivos y la estructura de directorios.
  • Debe tener compiladores para todos los lenguajes de programación usados por el sitio en el servidor.
  • Si se produce un error en la compilación de cualquier archivo, se produce un error en la compilación completa del sitio.

También puede volver a compilar una aplicación después de agregarle nuevos archivos de origen. La herramienta compila solo los archivos nuevos o modificados salvo que incluya la opción -c.

Nota:

La compilación de una aplicación que contiene una aplicación anidada no compila la aplicación anidada. La aplicación anidada debe compilarse por separado.

Compilación de implementación de una aplicación

Para compilar una aplicación para la implementación (compilación en una ubicación de destino) debe especificar el parámetro targetDir. targetDir puede ser la ubicación final de la aplicación web o la aplicación compilada se puede implementar aún más. Utilizar la opción -u compila la aplicación de tal manera que puede realizar cambios en determinados archivos en la aplicación compilada sin volver a compilarla. Aspnet_compiler.exe hace una distinción entre los tipos de archivo estáticos y dinámicos y los controla de forma diferente al crear la aplicación resultante.

  • Los tipos de archivo estáticos son aquellos que no tienen un compilador asociado o proveedor de compilación, como archivos cuyos nombres tienen extensiones como .css, .gif, .htm, .html, .jpg, .js, etc. Estos archivos se copian simplemente en la ubicación de destino, conservando sus lugares relativos en la estructura del directorio.
  • Los tipos de archivos dinámicos son aquellos que tienen un compilador o proveedor de compilación asociado, incluidos los archivos con extensiones de nombre de archivo específicas de ASP.NET, como .asax, .ascx, .ashx, .aspx, .browser, .master, etc. La herramienta de compilación de ASP.NET genera ensamblados a partir de estos archivos. Si se omite la opción -u, la herramienta también crea archivos con la extensión de nombre de archivo .COMPILED que asigna los archivos de origen originales a su ensamblaje. Para asegurarse de que se conserva la estructura de directorios del origen de la aplicación, la herramienta genera archivos de marcador de posición en las ubicaciones correspondientes de la aplicación de destino.

Debe utilizar la opción -u para indicar que el contenido de la aplicación compilada se puede modificar. De lo contrario, las modificaciones posteriores se omiten o provocan errores en tiempo de ejecución.

La siguiente tabla describe cómo la herramienta de compilación de ASP.NET manipula diferentes tipos de archivos cuando se incluye la opción -u.

Tipo de archivo Acción del compilador
.ascx, .aspx, .master Estos archivos se dividen en marcado y código fuente, que incluye tanto archivos de código subyacente como cualquier código incluido en los elementos <script runat="server">. El código fuente se compila en ensamblados, con nombres derivados de un algoritmo hash y los ensamblados se colocan en el directorio Bin. Cualquier código insertado, es decir, código incluido entre corchetes <% y %>, se incluye con el marcado y no se compila. Se crean nuevos archivos con el mismo nombre que los archivos de origen para contener el marcado y colocarlos en los directorios de salida correspondientes.
.ashx, .asmx Estos archivos no se compilan, se mueven a los directorios de salida tal como están y no se compilan. Si quiere que se compile el código del controlador, coloque el código en los archivos de código fuente en el directorio App_Code.
.cs, .vb, .jsl, .cpp (sin incluir archivos de código subyacente para los tipos de archivos enumerados anteriormente) Estos archivos se compilan y se incluyen como recurso en ensamblados que hacen referencia a ellos. Los archivos de origen no se copian en el directorio de salida. Si no se hace referencia a un archivo de código, no se compila.
Tipos de archivo personalizados Estos archivos no se compilan. Estos archivos se copian en los directorios de salida correspondientes.
Archivos de código fuente en el subdirectorio App_Code Estos archivos se compilan en ensamblados y se colocan en el directorio Bin.
Archivos .resx y .resource en el subdirectorio App_GlobalResources Estos archivos se compilan en ensamblados y se colocan en el directorio Bin. No se crea ningún subdirectorio App_GlobalResources en el directorio de salida principal y no se copia en los directorios de salida ningún archivo .resx o .resources ubicado en el directorio de origen.
Archivos .resx y .resource en el subdirectorio App_LocalResources Estos archivos no se compilan, además, se copian en los directorios de salida correspondientes.
Archivos .skin en el subdirectorio App_Themes Los archivos .skin y los archivos de temas estáticos no se compilan y se copian en los directorios de salida correspondientes.
Tipos de archivos estáticos .browser Web.config Ensamblados ya presentes en el directorio Bin Estos archivos se copian tal como están en los directorios de salida.

La siguiente tabla describe cómo la herramienta de compilación de ASP.NET manipula diferentes tipos de archivos cuando se omite la opción -u.

Tipo de archivo Acción del compilador
.aspx, .asmx, .ashx, .master Estos archivos se dividen en marcado y código fuente, que incluye tanto archivos de código subyacente como cualquier código incluido en los elementos <script runat="server">. El código fuente se compila en ensamblados, con nombres derivados de un algoritmo hash. Los ensamblados resultantes se colocan en el directorio Bin. Cualquier código insertado, es decir, código incluido entre corchetes <% y %>, se incluye con el marcado y no se compila. El compilador crea nuevos archivos para que contengan el marcado con el mismo nombre que los archivos de origen. Estos archivos resultantes se colocan en el directorio Bin. El compilador también crea archivos con el mismo nombre que los archivos de origen pero con la extensión .COMPILED que contienen información de asignación. Los archivos .COMPILED se colocan en los directorios de salida correspondientes a la ubicación original de los archivos de origen.
.ascx Estos archivos se dividen en marcado y código fuente. El código fuente se compila en ensamblados y se coloca en el directorio Bin, con nombres derivados de un algoritmo hash. No se generan archivos de marcado.
.cs, .vb, .jsl, .cpp (sin incluir archivos de código subyacente para los tipos de archivos enumerados anteriormente) El código fuente al que hacen referencia los ensamblados generados a partir de archivos .ascx, .ashx o .aspx se compila en ensamblados y se coloca en el directorio Bin. No se copia ningún archivo de origen.
Tipos de archivo personalizados Estos archivos se compilan como archivos dinámicos. Según el tipo de archivo en el que se basan, el compilador puede colocar archivos de asignación en los directorios de salida.
Archivos del subdirectorio App_Code Los archivos de código fuente de este subdirectorio se compilan en ensamblados y se colocan en el directorio Bin.
Archivos del subdirectorio App_GlobalResources Estos archivos se compilan en ensamblados y se colocan en el directorio Bin. No se crea ningún subdirectorio App_GlobalResources en el directorio de salida principal. Si el archivo de configuración especifica appliesTo="All", los archivos .resx y .resources se copian en los directorios de salida. No se copian si un BuildProvider hace referencia a ellos.
Archivos .resx y .resource en el subdirectorio App_LocalResources Estos archivos se compilan en ensamblados con nombres únicos y se colocan en el directorio Bin. No se copian archivos .resx o .resource en los directorios de salida.
Archivos .skin en el subdirectorio App_Themes Los temas se compilan en ensamblados y se colocan en el directorio Bin. Los archivos de código auxiliar se crean para los archivos .skin y se colocan en el directorio de salida correspondiente. Los archivos estáticos (como .css) se copian en los directorios de salida.
Tipos de archivos estáticos .browser Web.config Ensamblados ya presentes en el directorio Bin Estos archivos se copian tal como está en el directorio de salida.

Nombres de ensamblado fijos

Algunos escenarios, como la implementación de una aplicación web mediante MSI Windows Installer, requieren el uso de nombres de archivo y contenido coherentes, así como estructuras de directorio coherentes para identificar ensamblados o opciones de configuración para las actualizaciones. En tales casos, puede utilizar la opción -fixednames para especificar que la herramienta de compilación ASP.NET debe compilar un ensamblado para cada archivo de origen en lugar de utilizar el método donde se compilan varias páginas en ensamblados. Esto puede provocar un gran número de ensamblados, por lo que si le preocupa la escalabilidad, debe usar esta opción con precaución.

Compilación de nombres seguros

Se proporcionan las opciones -aptca, -delaysign, -keycontainer y -keyfile para que pueda usar Aspnet_compiler.exe para crear ensamblados con nombres seguros sin usar la Herramienta de nombre seguro (Sn.exe) por separado. Estas opciones corresponden, respectivamente, a AllowPartiallyTrustedCallersAttribute, AssemblyDelaySignAttribute, AssemblyKeyNameAttribute y AssemblyKeyFileAttribute.

La explicación de estos atributos no corresponde a este curso.

Laboratorios

Cada uno de los siguientes laboratorios se basa en los laboratorios anteriores. Es necesario hacerlos en orden.

Laboratorio 1: Uso de la API de configuración

  1. Cree un nuevo sitio web denominado mod9lab.
  2. Agregue un nuevo archivo de configuración web al sitio.
  3. Agregue lo siguiente al archivo Web.config:
<authorization>
    <deny users="?"/>
</authorization>

<identity impersonate="true"/>

Esto garantizará que tiene permiso para guardar los cambios en el archivo Web.config.

  1. Agregue un nuevo control Label a Default.aspx y cambie el id. a lblDebugStatus.
  2. Agregue un nuevo control Button a Default.aspx.
  3. Cambie el id. del control Button a btnToggleDebug y el texto a Alternar estado de depuración.
  4. Abra la Vista de código para el archivo de código subyacente de Default.aspx y agregue una declaración de uso para System.Web.Configuration de la siguiente manera:
using System.Web.Configuration;
  1. Agregue dos variables privadas a la clase y un método Page_Init como se muestra a continuación:
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. Agregue el siguiente código a Page_Load:
lblDebugStatus.Text = "Debug set to: " + _debugStatus.ToString();
  1. Guarde y examine Default.aspx. Observe que el control Label muestre el estado de depuración actual.
  2. Haga doble clic en el control Button del diseñador y agregue el siguiente código al evento Click del control Button:
compilation.Debug = !_debugStatus;
config.Save();
lblDebugStatus.Text = "Debug set to: " + compilation.Debug.ToString();
  1. Guarde y examine Default.aspx y haga clic en el botón.
  2. Abra el archivo Web.config después de cada clic en el botón y observe el atributo debug (depurar) en la sección <compilación>.

Laboratorio 2: Registro de reinicios de la aplicación

En este laboratorio, creará código que le permitirá alternar el registro de cierres, inicios y recompilaciones de aplicaciones en el Visor de eventos.

  1. Agregue DropDownList a Default.aspx y cambie el id. a ddlLogAppEvents.
  2. Establezca la propiedad AutoPostBack para DropDownList en true.
  3. Agregue tres elementos a la colección Items de DropDownList. Haga que el Texto para el primer elemento sea Seleccionar valor y el valor -1. Haga que el Texto y el Valor para el segundo elemento sea True y el Texto y el Valor del tercer elemento sea False.
  4. Agregue una nueva etiqueta a Default.aspx. Cambie el id. a lblLogAppEvents.
  5. Abra la vista de código subyacente para Default.aspx y agregue una nueva declaración para una variable de tipo HealthMonitoringSection, como se muestra a continuación:
public partial class _Default : System.Web.UI.Page {
    private bool _debugStatus;
    private CompilationSection compilation;
    private Configuration config;

    // new variable below
    private HealthMonitoringSection health;
}
  1. Agregue el siguiente código al código existente en Page_Init:
health = (HealthMonitoringSection)config.GetSection("system.web/healthMonitoring");
  1. Haga doble clic en DropDownList y agregue el siguiente código al 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. Examine Default.aspx.

  2. Establezca DropDown en False.

  3. Borre el registro de aplicaciones en el Visor de eventos.

  4. Haga clic en el botón para cambiar el atributo Debug (depurar) de la aplicación.

  5. Actualice el registro de aplicaciones en el Visor de eventos.

    1. ¿Se registraron eventos?
    2. ¿Por qué o por qué no?
  6. Establezca DropDown en True.

  7. Haga clic en el botón para alternar el atributo Debug (depurar) de la aplicación.

  8. Actualice el inicio de sesión de la aplicación en el Visor de eventos.

    1. ¿Se registraron eventos?
    2. ¿Cuál fue el motivo del por el que se apagó la aplicación?
  9. Experimente con activar y desactivar el registro y examine los cambios realizados en el archivo Web.config.

Más información:

El modelo de proveedor de ASP.NET 2.0 le permite crear sus propios proveedores no solo para la instrumentación de aplicaciones, sino también para muchos otros usos, como pertenencia, perfiles, etc. Para obtener información detallada sobre cómo escribir un proveedor personalizado para registrar eventos de aplicaciones en un archivo de texto, utilice este vínculo.