Настройка и инструментирование

От Майкрософт

Замечание

С момента написания этой статьи провайдеры членства ASP.NET были заменены посредством ASP.NET Identity. Настоятельно рекомендуется обновить приложения для использования платформы ASP.NET identity, а не поставщиков членства, которые были представлены в то время, когда эта статья была написана. ASP.NET Identity имеет ряд преимуществ по сравнению с системой членства ASP.NET, в том числе:

  • Улучшенная производительность
  • Улучшенная расширяемость и возможность тестирования
  • Поддержка OAuth, OpenID Connect и двухфакторной проверки подлинности
  • Поддержка удостоверений на основе утверждений
  • Улучшение взаимодействия с ASP.Net Core

В ASP.NET 2.0 есть значительные изменения в конфигурации и инструментарии. Новый API конфигурации ASP.NET позволяет программным способом вносить изменения конфигурации. Кроме того, многие новые параметры конфигурации существуют для новых конфигураций и инструментирования.

В ASP.NET 2.0 есть значительные изменения в конфигурации и настройке. Новый API конфигурации ASP.NET позволяет программным способом вносить изменения конфигурации. Кроме того, многие новые параметры конфигурации существуют для новых конфигураций и инструментирования.

В этом модуле мы обсудим ASP.NET API конфигурации, так как он связан с чтением и записью в файлы конфигурации ASP.NET, и мы также рассмотрим инструментирование ASP.NET. Мы также рассмотрим новые функции, доступные в трассировке ASP.NET.

API конфигурации ASP.NET

API конфигурации ASP.NET позволяет разрабатывать, развертывать и управлять данными конфигурации приложений с помощью одного интерфейса программирования. API конфигурации можно использовать для разработки и изменения полной ASP.NET конфигураций программным способом без прямого редактирования XML-файла в файлах конфигурации. Кроме того, вы можете использовать API конфигурации в консольных приложениях и сценариях, которые вы разрабатываете, в средствах управления на основе веб-сайтов и в оснастках консоли управления Майкрософт (MMC).

Следующие два средства управления конфигурацией используют API конфигурации и включаются в .NET Framework версии 2.0:

  • Оснастка MMC ASP.NET, использующая API конфигурации для упрощения административных задач, предоставляет интегрированное представление данных локальной конфигурации на всех уровнях иерархии конфигурации.
  • Средство администрирования веб-сайта, которое позволяет управлять параметрами конфигурации для локальных и удаленных приложений, включая размещенные сайты.

API конфигурации ASP.NET состоит из набора объектов управления ASP.NET, которые можно использовать для программной настройки веб-сайтов и приложений. Объекты управления реализуются в виде библиотеки классов .NET Framework. Модель программирования API конфигурации помогает обеспечить согласованность кода и надежность путем применения типов данных во время компиляции. Чтобы упростить управление конфигурациями приложений, API конфигурации позволяет просматривать данные, объединенные со всех точек в иерархии конфигурации как единую коллекцию, а не просматривать данные в виде отдельных коллекций из разных файлов конфигурации. Кроме того, API конфигурации позволяет управлять всеми конфигурациями приложений без прямого редактирования XML в файлах конфигурации. Наконец, API упрощает задачи настройки, поддерживая средства администрирования, такие как средство администрирования веб-сайта. API конфигурации упрощает развертывание, поддерживая создание файлов конфигурации на компьютере и выполнение скриптов конфигурации на нескольких компьютерах.

Замечание

API конфигурации не поддерживает создание приложений IIS.

Работа с параметрами локальной и удаленной конфигурации

Объект configuration представляет объединенное представление параметров конфигурации, которые применяются к определенной физической сущности, например к компьютеру или к логической сущности, например приложению или веб-сайту. Указанная логическая сущность может существовать на локальном компьютере или на удаленном сервере. Если для указанной сущности нет файла конфигурации, объект Configuration представляет параметры конфигурации по умолчанию, определенные файлом Machine.config.

Объект Configuration можно получить с помощью одного из открытых методов конфигурации из следующих классов:

  1. Класс ConfigurationManager, если ваша сущность — программное обеспечение клиента.
  2. Класс WebConfigurationManager, если сущность является веб-приложением.

Эти методы возвращают объект Configuration, который, в свою очередь, предоставляет необходимые методы и свойства для обработки базовых файлов конфигурации. Эти файлы можно получить для чтения или записи.

Reading

Для чтения сведений о конфигурации используется метод GetSection или GetSectionGroup. Пользователь или процесс, который читает, должен иметь разрешения на чтение всех файлов конфигурации в иерархии.

Замечание

Если используется статический метод GetSection, который принимает параметр пути, параметр пути должен ссылаться на приложение, в котором выполняется код. В противном случае параметр игнорируется, а сведения о конфигурации для текущего запущенного приложения возвращаются.

Написание

Для записи сведений о конфигурации используется один из методов сохранения. Пользователь или процесс записи должен иметь разрешения на запись в файле конфигурации и каталоге на текущем уровне иерархии конфигурации, а также разрешения на чтение всех файлов конфигурации в иерархии.

Чтобы создать файл конфигурации, представляющий унаследованные параметры конфигурации для указанной сущности, используйте один из следующих методов конфигурации сохранения:

  1. Метод Save для создания нового файла конфигурации.
  2. Метод SaveAs для создания нового файла конфигурации в другом расположении.

Классы конфигурации и пространства имен

Многие классы конфигурации и методы похожи друг на друга. В следующей таблице описаны наиболее часто используемые классы конфигурации и пространства имен.

Класс конфигурации или пространство имен Описание
Пространство имен System.Configuration Содержит основные классы конфигурации для всех приложений .NET Framework. Классы обработчика разделов используются для получения данных конфигурации для раздела из методов, таких как GetSection и GetSectionGroup. Эти два метода являются нестатичными.
Класс System.Configuration.Configuration Представляет набор данных конфигурации для компьютера, приложения, веб-каталога или другого ресурса. Этот класс содержит полезные методы, такие как GetSection и GetSectionGroup, для обновления параметров конфигурации и получения ссылок на разделы и группы разделов. Этот класс используется в качестве возвращаемого типа для методов, которые получают данные конфигурации во время разработки, такие как методы классов WebConfigurationManager и ConfigurationManager.
Пространство имен System.Web.Configuration Содержит классы обработчика разделов для разделов конфигурации ASP.NET, определенных в параметрах конфигурации ASP.NET. Классы обработчика разделов используются для получения данных конфигурации для раздела из методов, таких как GetSection и GetSectionGroup.
Класс System.Web.Configuration.WebConfigurationManager Предоставляет полезные методы для получения ссылок на параметры конфигурации во время выполнения и времени разработки. Эти методы используют класс System.Configuration.Configuration в качестве возвращаемого типа. Вы можете использовать статический метод GetSection этого класса или нестатический метод GetSection класса System.Configuration.ConfigurationManager взаимозаменяемо. Для конфигураций веб-приложений класс System.Web.Configuration.WebConfigurationManager рекомендуется вместо класса System.Configuration.ConfigurationManager.
Пространство имен System.Configuration.Provider Предоставляет способ настройки и расширения поставщика конфигурации. Это базовый класс для всех классов поставщиков в системе конфигурации.
Пространство имен System.Web.Management Содержит классы и интерфейсы для управления работоспособностью веб-приложений и мониторинга их работоспособности. Строго говоря, это пространство имен не считается частью API конфигурации. Например, трассировка и генерация событий осуществляются классами в этом пространстве имен.
Пространство имен System.Management.Instrumentation Предоставляет классы, необходимые для инструментирования приложений для предоставления информации об управлении и событиями с помощью инструментария управления Windows (WMI) потенциальным потребителям. ASP.NET мониторинг работоспособности использует WMI для доставки событий. Строго говоря, это пространство имен не считается частью API конфигурации.

Чтение из файлов конфигурации ASP.NET

Класс WebConfigurationManager является основным классом для чтения из файлов конфигурации ASP.NET. Для чтения файлов конфигурации ASP.NET необходимо выполнить три шага.

  1. Получите объект Configuration с помощью метода OpenWebConfiguration.
  2. Получите ссылку на нужный раздел в файле конфигурации.
  3. Считывайте требуемую информацию из файла конфигурации.

Объект Configuration представляет не определенный файл конфигурации. Вместо этого он представляет объединенное представление конфигурации компьютера, приложения или веб-сайта. В следующем примере кода создается экземпляр объекта Configuration, представляющего конфигурацию веб-приложения с именем ProductInfo.

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

Замечание

Обратите внимание, что если путь /ProductInfo не существует, приведенный выше код вернет конфигурацию по умолчанию, как указано в файле machine.config.

После получения объекта Configuration можно использовать метод GetSection или GetSectionGroup для детализации параметров конфигурации. В следующем примере показано, как получить ссылку на параметры олицетворения для приведенного выше приложения ProductInfo:

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

Запись в файлы конфигурации ASP.NET

Как и при чтении из файлов конфигурации, класс WebConfigurationManager является основным для записи в файлы конфигурации Asp.NET. Существует также три шага для записи в файлы конфигурации ASP.NET.

  1. Получите объект Configuration с помощью метода OpenWebConfiguration.
  2. Получите ссылку на нужный раздел в файле конфигурации.
  3. Напишите нужные сведения из файла конфигурации с помощью метода Save или SaveAs.

Следующий код изменяет атрибут отладки<элемента компиляции> на 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!");
}

При выполнении этого кода атрибут < элемента компиляции> будет иметь значение false для файла web.config веб-приложения.

Пространство имен System.Web.Management

Пространство имен System.Web.Management предоставляет классы и интерфейсы для управления работоспособностью ASP.NET приложений и мониторинга их работоспособности.

Ведение журнала осуществляется путем определения правила, которое связывает события с поставщиком. Правило определяет тип событий, отправляемых поставщику. Для регистрации доступны следующие базовые события:

WebBaseEvent Базовый класс для всех типов событий. Содержит обязательные свойства для всех событий, таких как код события, код сведений о событии, дата и время возникновения события, порядковый номер, сообщение о событии и сведения о событии.
WebManagementEvent Базовый класс событий для событий управления, таких как время существования приложения, запрос, ошибка и события аудита.
WebHeartbeatEvent Событие, созданное приложением в регулярных интервалах для сбора полезных сведений о состоянии среды выполнения.
WebAuditEvent Базовый класс для событий аудита безопасности, которые используются для маркировки условий, таких как сбой авторизации, сбой расшифровки и т. д.
WebRequestEvent Базовый класс для всех событий запроса информации.
WebBaseErrorEvent Базовый класс для всех событий, указывающих на условия ошибки.

Доступные типы поставщиков позволяют отправлять выходные данные событий в средство просмотра событий, SQL Server, инструментарий управления Windows (WMI) и электронную почту. Предварительно настроенные поставщики и сопоставления событий снижают объем работы, необходимой для получения выходных данных событий.

ASP.NET 2.0 использует поставщик журнала событий из коробки для регистрации событий на основе запуска и остановки доменов приложений, а также для ведения журнала необработанных исключений. Это помогает охватывать некоторые из основных сценариев. Например, предположим, что приложение создает исключение, но пользователь не сохраняет ошибку и не может воспроизвести его. С помощью правила журнала событий по умолчанию вы сможете собирать сведения об исключении и стеке, чтобы получить лучшее представление о том, какая ошибка произошла. Другой пример применяется, если приложение теряет состояние сеанса. В этом случае вы можете просмотреть журнал событий, чтобы определить, перезапускается ли домен приложения, и почему изначально домен приложения остановился.

Кроме того, система мониторинга состояния здоровья подлежит расширению. Например, можно определить пользовательские веб-события, запустить их в приложении, а затем определить правило для отправки сведений о событии поставщику, например электронной почты. Это позволяет легко связать инструментирование с поставщиками услуг мониторинга состояния. В качестве другого примера можно запустить событие при каждом обработке заказа и настроить правило, которое отправляет каждое событие в базу данных SQL Server. Вы также можете инициировать событие, если пользователь не может войти в систему несколько раз подряд и настроить событие для использования поставщиков услуг, использующих электронную почту.

Конфигурация поставщиков и событий по умолчанию хранится в глобальном Web.config файле. Глобальный Web.config файл сохраняет все параметры на основе Веб-сайта, хранящиеся в файле Machine.config в ASP.NET 1x. Глобальный Web.config файл расположен в следующем каталоге:

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

Раздел <healthMonitoring> глобального Web.config файла предоставляет параметры конфигурации по умолчанию. Вы можете переопределить эти параметры или настроить собственные параметры, реализовав <раздел healthMonitoring> в файле Web.config приложения.

Раздел <healthMonitoring> глобального Web.config файла содержит следующие элементы:

providers Содержит поставщики, настроенные для средства просмотра событий, WMI и SQL Server.
eventMappings Содержит сопоставления для различных классов WebBase. Этот список можно расширить, если вы создаете собственный класс событий. Создание собственного класса событий обеспечивает более подробную детализацию по сравнению с поставщиками, в которые вы отправляете информацию. Например, можно настроить необработанные исключения для отправки в SQL Server, отправляя собственные пользовательские события в электронную почту.
Правила Связывает eventMappings к поставщику.
Буферизация Используется с SQL Server и поставщиками электронной почты для определения частоты отправки событий в поставщик.

Ниже приведен пример кода из глобального Web.config файла.

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

Хранение событий в средстве просмотра событий

Как упоминалось ранее, поставщик для ведения журнала событий в средстве просмотра событий настроен для вас в глобальном Web.config файле. По умолчанию регистрируются все события на основе WebBaseErrorEvent и WebFailureAuditEvent . Вы можете добавить дополнительные правила для записи дополнительных сведений в журнал событий. Например, если вы хотите регистрировать все события (т. е. каждое событие на основе WebBaseEvent), можно добавить следующее правило в файл Web.config:

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

Это правило свяжет карту событий Все события с поставщиком журнала событий. Как eventMapping, так и поставщик включаются в глобальный файл Web.config.

Хранение событий в SQL Server

Этот метод использует базу данных ASPNETDB , созданную средством Aspnet_regsql.exe. Поставщик по умолчанию использует строку подключения LocalSqlServer, которая использует базу данных на основе файлов в папке App_data или локальный экземпляр SQLExpress SQL Server. Строка подключения LocalSqlServer и SqlProvider настраиваются в глобальном Web.config файле.

Строка подключения LocalSqlServer в глобальном Web.config-файле выглядит следующим образом:

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

Если вы хотите использовать другой экземпляр SQL Server, вам потребуется использовать средство Aspnet_regsql.exe, которое можно найти в папке %windir%\Microsoft.Net\Framework\v2.0.* . Используйте средство Aspnet_regsql.exe для создания пользовательской базы данных ASPNETDB в экземпляре SQL Server, а затем добавьте строку подключения в файл конфигурации приложений, а затем добавьте поставщика с помощью новой строки подключения. После создания базы данных ASPNETDB вам нужно будет задать правило для связывания eventMapping с sqlProvider.

Независимо от того, используете ли вы SqlProvider по умолчанию или настраиваете собственного поставщика, следует добавить правило, связывающее поставщика с картой событий. Следующее правило связывает нового поставщика, созданного выше, с картой событий "Все события ". Это правило регистрирует все события на основе WebBaseEvent и отправляет их в MySqlWebEventProvider, который будет использовать строку подключения MYASPNETDB. Следующий код добавляет правило для связывания поставщика с картой событий:

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

Если вы хотите отправлять ошибки только в SQL Server, можно добавить следующее правило:

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

Как пересылать события в WMI

Вы также можете перенаправить события в WMI. Поставщик WMI настроен для вас в глобальном Web.config-файле по умолчанию.

В следующем примере кода добавляется правило для пересылки событий в WMI:

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

Необходимо добавить правило, чтобы связать eventMapping с поставщиком, и приложение слушателя WMI для отслеживания событий. В следующем примере кода добавляется правило для связывания поставщика WMI с картой событий All Events :

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

Как пересылать события по электронной почте

Вы также можете пересылать события по электронной почте. Будьте осторожны с правилами событий, которые вы сопоставляете с поставщиком электронной почты, так как вы можете непреднамеренно отправлять себе много информации, которая может лучше подходить для SQL Server или для журнала событий. Существует два поставщика электронной почты; SimpleMailWebEventProvider и TemplatedMailWebEventProvider. Каждый имеет одинаковые атрибуты конфигурации, за исключением атрибутов "template" и "detailedTemplateErrors", оба из которых доступны только в TemplatedMailWebEventProvider.

Замечание

Ни один из этих поставщиков электронной почты не настроен для вас. Их необходимо добавить в файл Web.config.

Основное различие между этими двумя поставщиками электронной почты заключается в том, что SimpleMailWebEventProvider отправляет сообщения электронной почты в универсальный шаблон, который нельзя изменить. В примере файла Web.config этот поставщик электронной почты добавляется в список настроенных поставщиков с помощью следующего правила:

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

Следующее правило также добавляется для привязки поставщика сообщений электронной почты к карте событий All Events :

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

трассировка ASP.NET 2.0

Существует три основных улучшения трассировки в ASP.NET 2.0.

  1. Встроенная функция трассировки
  2. Программный доступ к сообщениям трассировки
  3. Улучшенная трассировка на уровне приложения

Встроенная функция трассировки

Теперь можно маршрутизировать сообщения, создаваемые классом System.Diagnostics.Trace, в выходные данные трассировки ASP.NET и маршрутизировать сообщения, создаваемые трассировкой ASP.NET, в System.Diagnostics.Trace. Также можно перенаправить события инструментирования ASP.NET на System.Diagnostics.Trace. Эта функция предоставляется новым атрибутом writeToDiagnosticsTrace элемента <trace>. Если это логическое значение равно true, сообщения трассировки ASP.NET перенаправляются в инфраструктуру System.Diagnostics, чтобы использоваться любыми прослушивателями, которые зарегистрированы для отображения сообщений трассировки.

Программный доступ к сообщениям трассировки

ASP.NET 2.0 обеспечивает программный доступ ко всем сообщениям трассировки через класс TraceContextRecord и коллекцию TraceRecords . Наиболее эффективным способом доступа к сообщениям трассировки является регистрация делегата TraceContextEventHandler (также нового в ASP.NET 2.0) для обработки нового события TraceFinished . Затем вы можете перебрать сообщения трассировки по своему усмотрению.

В следующем примере кода показано следующее:

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

В приведенном выше примере я выполняю цикл по коллекции TraceRecords, а затем записываю каждое сообщение в поток ответа.

Улучшенная трассировка на уровне приложения

Трассировка на уровне приложения улучшается с помощью внедрения нового атрибута mostRecent<элемента трассировки> . Этот атрибут указывает, отображаются ли последние выходные данные трассировки на уровне приложения и старые данные трассировки за пределами ограничений, указанных запросомLimit, удаляются. Если значение false, данные трассировки отображаются для запросов, пока не будет достигнут атрибут requestLimit.

средства командной строки ASP.NET

Существует несколько средств командной строки для помощи в настройке ASP.NET. ASP.NET разработчики должны быть знакомы с средством aspnet_regiis.exe. ASP.NET 2.0 предоставляет три других средства командной строки для помощи в настройке.

Доступны следующие средства командной строки:

инструмент Использование
aspnet_regiis.exe Разрешает регистрацию ASP.NET с помощью IIS. Существует две версии этих средств, которые отправляются с ASP.NET 2.0, один для 32-разрядных систем (в папке Framework) и один для 64-разрядных систем (в папке Framework64). 64-разрядная версия не будет установлена на 32-разрядной ОС.
aspnet_regsql.exe Средство регистрации SQL Server ASP.NET используется для создания базы данных Microsoft SQL Server для использования поставщиками SQL Server в ASP.NET, а также для добавления или удаления параметров из существующей базы данных. Файл Aspnet_regsql.exe находится в папке [drive:]\WINDOWS\Microsoft.NET\Framework\versionNumber на веб-сервере.
aspnet_regbrowsers.exe Средство регистрации браузера ASP.NET анализирует и компилирует все определения браузера на уровне системы в сборку и устанавливает сборку в глобальный кэш сборок. Средство использует файлы определения браузера (.BROWSER файлы) из подкаталога .NET Framework Browsers. Средство можно найти в папке %SystemRoot%\Microsoft.NET\Динамическая библиотека\версия\.
aspnet_compiler.exe Средство компиляции ASP.NET позволяет компилировать веб-приложение ASP.NET либо на месте, либо для развертывания в целевом расположении, например на рабочем сервере. Компиляция на месте помогает производительности приложений, так как конечные пользователи не сталкиваются с задержкой при первом запросе приложения во время компиляции приложения.

Поскольку средство aspnet_regiis.exe не является новым для ASP.NET 2.0, мы не обсудим его здесь.

средство регистрации SQL Server ASP.NET — aspnet_regsql.exe

Можно задать несколько типов параметров с помощью средства регистрации SQL Server ASP.NET. Можно указать подключение SQL, указать, какие службы приложений ASP.NET используют SQL Server для управления информацией, указать, какая база данных или таблица используется для зависимостей кэша SQL, а также добавить или удалить поддержку использования SQL Server для хранения процедур и состояния сеанса.

Несколько служб приложений ASP.NET полагаются на поставщика для управления хранением и получением данных из источника данных. Каждый поставщик зависит от источника данных. ASP.NET включает поставщик SQL Server для следующих функций ASP.NET:

При установке ASP.NET файл Machine.config для сервера включает элементы конфигурации, указывающие поставщиков SQL Server для каждой из функций ASP.NET, использующих систему поставщиков. Эти поставщики настроены по умолчанию для подключения к локальному экземпляру пользователя SQL Server Express 2005. Если вы изменяете строку подключения по умолчанию, используемую поставщиками, прежде чем использовать любую из ASP.NET функций, настроенных в конфигурации компьютера, необходимо установить базу данных SQL Server и элементы базы данных для выбранной функции с помощью Aspnet_regsql.exe. Если база данных, указанная с помощью средства регистрации SQL, еще не существует (aspnetdb будет базой данных по умолчанию, если она не указана в командной строке), текущий пользователь должен иметь права на создание баз данных в SQL Server, а также создание элементов схемы в базе данных.

Зависимость кэша SQL

Расширенная функция кэширования выходных данных ASP.NET — зависимость кэша SQL. Зависимость кэша SQL поддерживает два разных режима работы: один из них использует ASP.NET реализацию опроса таблиц и второй режим, использующий функции уведомления запросов SQL Server 2005. Средство регистрации SQL можно использовать для настройки режима опроса таблиц.

Состояние сеанса

По умолчанию значения состояния сеанса и сведения хранятся в памяти в процессе ASP.NET. Кроме того, можно хранить данные сеанса в базе данных SQL Server, где ее можно совместно использовать несколькими веб-серверами. Если база данных, указанная для состояния сеанса с помощью средства регистрации SQL, еще не существует, текущий пользователь должен иметь права создавать базы данных в SQL Server, а также создавать элементы схемы в базе данных. Если база данных существует, текущий пользователь должен иметь права на создание элементов схемы в существующей базе данных.

Чтобы установить базу данных состояния сеанса на SQL Server, запустите средство Aspnet_regsql.exe и укажите следующие сведения с помощью команды:

  • Имя экземпляра SQL Server с помощью параметра -S .
  • Учетные данные входа для учетной записи с разрешением на создание базы данных на компьютере под управлением SQL Server. Используйте параметр -E для использования пользователя, вошедшего в систему, или используйте параметр -U , чтобы указать идентификатор пользователя вместе с параметром -P , чтобы указать пароль.
  • Параметр командной строки -ssadd для добавления базы данных состояния сеанса.

По умолчанию средство Aspnet_regsql.exe нельзя использовать для установки базы данных состояния сеанса на компьютере под управлением SQL Server 2005 Express Edition.

Средство регистрации браузера ASP.NET — aspnet_regbrowsers.exe

В ASP.NET версии 1.1 файл Machine.config содержал раздел <browserCaps>. В этом разделе содержится ряд записей XML, определяющих конфигурации для различных браузеров на основе регулярного выражения. Для ASP.NET версии 2.0 новый файл .BROWSER определяет параметры определенного браузера с помощью XML-записей. Вы добавляете сведения о новом браузере, добавив новый .BROWSER файл в папку, расположенную в %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers на вашем компьютере.

Поскольку приложение не считывает файл .config каждый раз, когда ему требуются сведения о браузере, вы можете создать новый файл .BROWSER и запустить Aspnet_regbrowsers.exe, чтобы добавить необходимые изменения в сборку. Это позволяет серверу сразу же получать доступ к новым сведениям браузера, поэтому вам не нужно закрывать какие-либо приложения для получения информации. Приложение может получить доступ к возможностям браузера через свойство Browser текущего запроса HttpRequest.

При запуске aspnet_regbrowser.exeдоступны следующие параметры:

Выбор Описание
-? Отображает текст справки Aspnet_regbbrowsers.exe в командном окне.
-i Создает сборку возможностей браузера среды выполнения и устанавливает ее в глобальном кэше сборок.
-u Удаляет сборку возможностей браузера среды выполнения из глобального кэша сборок.

Средство компиляции ASP.NET — aspnet_compiler.exe

Средство компиляции ASP.NET можно использовать двумя общими способами: для компиляции на месте и для компиляции с развертыванием, где указывается целевой выходной каталог.

Компиляция приложения на месте

Средство компиляции ASP.NET может компилировать приложение на месте, то есть имитирует поведение выполнения нескольких запросов к приложению, что приводит к регулярной компиляции. Пользователи предварительно скомпилированного сайта не будут испытывать задержку, вызванную компиляцией страницы по первому запросу.

При предварительной компиляции сайта на месте применяются следующие элементы:

  • Сайт сохраняет свои файлы и структуру каталогов.
  • У вас должны быть компиляторы для всех языков программирования, используемых сайтом на сервере.
  • Если любой файл не компилируется успешно, компиляция всего сайта завершается сбоем.

Вы также можете повторно компилировать приложение после добавления в него новых исходных файлов. Средство компилирует только новые или измененные файлы, если параметр -c не включен.

Замечание

Компиляция приложения, содержащего вложенное приложение, не компилирует вложенное приложение. Вложенное приложение должно быть скомпилировано отдельно.

Компиляция приложения для развертывания

Вы компилируете приложение для развертывания (компиляция в целевое расположение), указав параметр targetDir. Каталог назначения может быть финальной папкой для веб-приложения, или скомпилированное приложение можно дополнительно развернуть. С помощью параметра -u приложение компилируется таким образом, чтобы можно было вносить изменения в определенные файлы в скомпилированном приложении без повторной компиляции. Aspnet_compiler.exe делает различие между статическими и динамическими типами файлов и обрабатывает их по-разному при создании результирующего приложения.

  • Статические типы файлов — это те, которые не имеют связанного компилятора или поставщика сборки, например файлы, именованные которыми имеют расширения, такие как .css, .gif, .htm, .html, .jpg, .js и т. д. Эти файлы просто копируются в целевое расположение, при этом их относительные места в структуре каталогов сохранены.
  • Динамические типы файлов — это те, которые имеют ассоциированный компилятор или поставщика сборки, включая файлы с расширениями имен файлов, специфичными для ASP.NET, такие как .asax, .ascx, .ashx, .aspx, .browser, .master и т. д. Средство компиляции ASP.NET создает сборки из этих файлов. Если параметр -u опущен, средство также создает файлы с расширением .COMPILED, которые сопоставляют исходные файлы с их сборкой. Чтобы обеспечить сохранение структуры каталогов исходного кода приложения, средство создает файлы-заполнители в соответствующих местах в целевом приложении.

Необходимо использовать параметр -u , чтобы указать, что содержимое скомпилированного приложения можно изменить. В противном случае последующие изменения игнорируются или вызывают ошибки во время выполнения.

В следующей таблице описывается, как средство компиляции ASP.NET обрабатывает различные типы файлов при включении параметра -u .

Тип файла Действие компилятора
.ascx, .aspx, .master Эти файлы разделены на разметку и исходный код, который включает как файлы программной части, так и любой код, заключенный в <элементы runat="server".> Исходный код компилируется в сборки с именами, производными от хэширования алгоритма, и сборки помещаются в каталог Bin. Любой встроенный код, то есть код, заключенный между <% и %> скобками, включается в разметку и не компилируется. Новые файлы с тем же именем, что и исходные файлы, создаются для размещения разметки и помещения в соответствующие выходные каталоги.
.ashx, .asmx Эти файлы не компилируются и перемещаются в выходные каталоги в исходном виде. Если вы хотите скомпилировать код обработчика, поместите код в файлы исходного кода в каталог App_Code.
.cs, .vb, JSL, .cpp (не включая файлы кода для типов файлов, перечисленных ранее) Эти файлы компилируются и включаются в качестве ресурса в сборках, ссылающихся на них. Исходные файлы не копируются в выходной каталог. Если на файл кода нет ссылок, он не компилируется.
Пользовательские типы файлов Эти файлы не компилируются. Эти файлы копируются в соответствующие выходные каталоги.
Файлы исходного кода в подкаталоге App_Code Эти файлы компилируются в сборки и помещаются в каталог Bin.
.resx и .resource файлы в подкаталоге App_GlobalResources Эти файлы компилируются в сборки и помещаются в каталог Bin. Подкаталог App_GlobalResources не создается в основном каталоге вывода, и файлы .resx или .resources, расположенные в исходном каталоге, не копируются в каталоги вывода.
RESX и .resource файлы в подкаталоге App_LocalResources Эти файлы не компилируются и копируются в соответствующие выходные каталоги.
Файлы .skin в подкаталоге App_Themes .skin файлы и статические файлы тем не компилируются, а копируются в соответствующие каталоги вывода.
.browser Web.config Статические типы файлов сборок уже присутствуют в каталоге bin Эти файлы копируются как есть в выходные каталоги.

В следующей таблице описывается, как средство компиляции ASP.NET обрабатывает различные типы файлов при пропуске параметра -u .

Тип файла Действие компилятора
.aspx, .asmx, .ashx, .master Эти файлы разделены на разметку и исходный код, который включает как файлы программной части, так и любой код, заключенный в <элементы runat="server".> Исходный код компилируется в сборки с именами, производными от алгоритма хэширования. Результирующая сборка помещается в каталог Bin. Любой встроенный код, то есть код, заключенный между <% и %> скобками, включается в разметку и не компилируется. Компилятор создает новые файлы для хранения разметки с тем же именем, что и исходные файлы. Эти полученные файлы помещаются в каталог Bin. Компилятор также создает файлы с таким же именем, как у исходных файлов, но с расширением .COMPILED, содержащие сведения о сопоставлении. Teh. СКОМПИЛИРОВАННЫЕ файлы помещаются в выходные каталоги, соответствующие исходному расположению исходных файлов.
.ascx Эти файлы разделены на разметку и исходный код. Исходный код компилируется в сборки и помещается в каталог Bin с именами, производными от алгоритма хэширования. Файлы разметки не создаются.
.cs, .vb, JSL, .cpp (не включая файлы кода для типов файлов, перечисленных ранее) Исходный код, на который ссылаются сборки, созданные из .ascx, .ashx или .aspx-файлов, компилируется в сборки и помещается в каталог Bin. Исходные файлы не копируются.
Пользовательские типы файлов Эти файлы компилируются как динамические файлы. В зависимости от типа файла, на основе которых они основаны, компилятор может размещать файлы сопоставления в выходных каталогах.
Файлы в подкаталоге App_Code Файлы исходного кода в этом подкаталоге компилируются в сборки и помещаются в каталог Bin.
Файлы в подкаталоге App_GlobalResources Эти файлы компилируются в сборки и помещаются в каталог Bin. Подкаталог App_GlobalResources не создается в основном выходном каталоге. Если файл конфигурации задает значение appliesTo="All", ФАЙЛЫ RESX и .resources копируются в выходные каталоги. Они не копируются, если на них ссылается BuildProvider.
файлы .resx и .resource в подкаталоге App_LocalResources Эти файлы компилируются в сборки с уникальными именами и помещаются в каталог Bin. Файлы resx или .resource не копируются в выходные каталоги.
Файлы .skin в подкаталоге App_Themes Темы компилируются в сборки и помещаются в каталог Bin. Файлы-заглушки создаются для .skin файлов и помещаются в соответствующий выходной каталог. Статические файлы (например, .css) копируются в выходные каталоги.
.browser Web.config Статические типы файлов сборок уже присутствуют в каталоге bin Эти файлы копируются без изменений в выходной каталог.

Фиксированные имена сборок

В некоторых сценариях, таких как развертывание веб-приложения с помощью установщика WINDOWS MSI, требуется использование согласованных имен файлов и содержимого, а также согласованных структур каталогов для идентификации сборок или параметров конфигурации для обновлений. В этих случаях можно использовать параметр -fixednames , чтобы указать, что средство компиляции ASP.NET должно компилировать сборку для каждого исходного файла вместо того, чтобы использовать, где несколько страниц компилируются в сборки. Это может привести к большому количеству сборок, поэтому если вы обеспокоены масштабируемостью, следует использовать этот параметр с осторожностью.

Компиляция Strong-Name

Параметры -aptca, -delaysign, -keycontainer и -keyfile предоставляются для того, чтобы можно было использовать Aspnet_compiler.exe для создания строго именованных сборок без использования утилиты Strong Name (Sn.exe) в отдельности. Эти параметры соответствуют соответственно AllowPartiallyTrustedCallersAttribute, AssemblyDelaySignAttribute, AssemblyKeyNameAttribute и AssemblyKeyFileAttribute.

Обсуждение этих атрибутов выходит за рамки этого курса.

Лаборатории

Каждая из следующих лабораторий основана на предыдущих лабораториях. Вам потребуется выполнить их по порядку.

Лабораторная работа 1: Работа с API конфигурации

  1. Создайте новый веб-сайт с именем mod9lab.
  2. Добавьте новый файл веб-конфигурации на сайт.
  3. Добавьте следующее в файл web.config:
<authorization>
    <deny users="?"/>
</authorization>

<identity impersonate="true"/>

Это гарантирует, что у вас есть разрешение на сохранение изменений в файле web.config.

  1. Добавьте новый элемент управления Label для Default.aspx и измените идентификатор на lblDebugStatus.
  2. Добавьте новый элемент управления Button в Default.aspx.
  3. Измените идентификатор элемента управления Button на btnToggleDebug и текст на Переключение состояния отладки.
  4. Откройте представление кода для файла кода Default.aspx и добавьте инструкцию using для System.Web.Configuration следующим образом:
using System.Web.Configuration;
  1. Добавьте две частные переменные в класс и метод Page_Init, как показано ниже:
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. Добавьте следующий код в Page_Load:
lblDebugStatus.Text = "Debug set to: " + _debugStatus.ToString();
  1. Сохраните и просмотрите default.aspx. Обратите внимание, что элемент управления Label отображает текущее состояние отладки.
  2. Дважды щелкните кнопку Button в редакторе и добавьте следующий код в событие Click для кнопки Button.
compilation.Debug = !_debugStatus;
config.Save();
lblDebugStatus.Text = "Debug set to: " + compilation.Debug.ToString();
  1. Сохраните и просмотрите default.aspx и нажмите кнопку.
  2. Откройте файл web.config после нажатия каждой кнопки и просмотрите атрибут отладки в <разделе компиляции> .

Лаборатория 2. Ведение журнала перезапусков приложений

В этой лаборатории вы создадите код, позволяющий переключать ведение журнала завершения работы приложения, запуска и повторной компиляции в средстве просмотра событий.

  1. Добавьте выпадающий список в default.aspx и измените его ID на ddlLogAppEvents.
  2. Задайте для свойства AutoPostBackзначение true для DropDownList.
  3. Добавьте три элемента в коллекцию Items для DropDownList. Введите текст для первого элемента Select Value и значение -1. Сделайте текст и значение второго элемента true , а текст и значение третьего элемента false.
  4. Добавьте новую метку в default.aspx. Измените идентификатор на lblLogAppEvents.
  5. Откройте файл исходного кода для default.aspx и добавьте новое объявление переменной типа HealthMonitoringSection, как указано ниже:
public partial class _Default : System.Web.UI.Page {
    private bool _debugStatus;
    private CompilationSection compilation;
    private Configuration config;

    // new variable below
    private HealthMonitoringSection health;
}
  1. Добавьте следующий код в существующий код в Page_Init:
health = (HealthMonitoringSection)config.GetSection("system.web/healthMonitoring");
  1. Дважды щелкните dropDownList и добавьте следующий код в событие 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. Просмотр default.aspx.

  2. Установите для раскрывающегося списка значение False.

  3. Снимите журнал приложения в средстве просмотра событий.

  4. Нажмите кнопку, чтобы изменить атрибут отладки для приложения.

  5. Обновите журнал приложения в средстве просмотра событий.

    1. Регистрировались ли события?
    2. Почему или почему нет?
  6. Установите значение в раскрывающемся меню на True.

  7. Нажмите кнопку, чтобы переключить атрибут отладки для приложения.

  8. Обновите сеанс входа приложения в просмотре событий.

    1. Регистрировались ли события?
    2. Какова причина завершения работы приложения?
  9. Поэкспериментируйте с включением и отключением ведения журнала и просмотрите изменения, внесенные в файл web.config.

Дополнительные сведения:

модель провайдера ASP.NET 2.0 позволяет создавать собственные провайдеры не только для инструментирования приложений, но и для многих других целей, таких как членство, профили и т. д. Подробные сведения о создании пользовательского провайдера для записи событий приложения в текстовый файл см. по этой ссылке.