Поделиться через


Конфигурация и инструментирование

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

Примечание

С момента написания этой статьи поставщики членства 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, который, в свою очередь, предоставляет необходимые методы и свойства для обработки базовых файлов конфигурации. Вы можете получить доступ к этим файлам для чтения или записи.

Чтение

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

Примечание

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

Запись

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

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

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

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

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

Класс конфигурации или пространство имен Описание
Пространство имен System.Configuration Содержит классы конфигурации main для всех платформа .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.Configuration.Configuration.WebConfigurationManager рекомендуется использовать класс System.Web.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.

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

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

Пространство имен 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.

Разница между этими двумя поставщиками электронной почты main заключается в том, что 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"/>

Кроме того, добавляется следующее правило для привязки поставщика электронной почты к карте событий "Все события ".

<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 элемента трассировки>. Если это логическое значение равно 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, а затем записываю каждое сообщение в поток ответа.

Улучшенная трассировка Application-Level

Трассировка на уровне приложения улучшена благодаря внедрению нового атрибута <mostRecent элемента трассировки>. Этот атрибут указывает, отображаются ли последние выходные данные трассировки на уровне приложения, а старые данные трассировки, превышающие пределы, указанные в requestLimit, отклоняются. Если значение равно 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 Средство регистрации ASP.NET SQL Server используется для создания базы данных 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\Framework\version\.
aspnet_compiler.exe Средство компиляции ASP.NET позволяет скомпилировать веб-приложение ASP.NET на месте или для развертывания в целевом расположении, например на рабочем сервере. Компиляция на месте помогает повысить производительность приложения, так как конечные пользователи не сталкиваются с задержкой при первом запросе к приложению во время компиляции приложения.

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

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

С помощью средства регистрации ASP.NET SQL Server можно задать несколько типов параметров. Можно указать подключение 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, экспресс-выпуск.

Средство регистрации браузера 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. TargetDir может быть конечным расположением для веб-приложения, или скомпилированное приложение может быть развернуто дальше. При использовании параметра -u приложение компилируется таким образом, что вы можете вносить изменения в определенные файлы в скомпилированном приложении без его повторной компиляции. Aspnet_compiler.exe различает статические и динамические типы файлов и обрабатывает их по-разному при создании результирующего приложения.

  • Статические типы файлов — это файлы, которые не имеют связанного компилятора или поставщика сборки, например файлы, имена которых имеют расширения , такие как CSS, .gif, .htm, .html, .jpg, .js и т. д. Эти файлы просто копируются в целевое расположение, при этом их относительные расположения в структуре каталогов сохраняются.
  • Динамические типы файлов — это файлы, связанные с компилятором или поставщиком сборки, включая файлы с ASP.NET расширениями имен файлов, такими как .asax, .ascx, .ashx, .aspx, .browser, . master и т. д. Средство компиляции ASP.NET создает сборки из этих файлов. Если параметр -u опущен, средство также создает файлы с расширением . СКОМПИЛИРОВАНЫ, которые сопоставляют исходные исходные файлы со сборкой. Чтобы обеспечить сохранение структуры каталогов источника приложения, средство создает файлы заполнителей в соответствующих расположениях в целевом приложении.

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

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

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

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

Тип файла Действие компилятора
ASPX, ASMX, ASHX, . master Эти файлы разделены на разметку и исходный код, который включает как файлы программной части, так и любой код, заключенный в <элементы script runat="server".> Исходный код компилируется в сборки с именами, производными от алгоритма хэширования. Полученные сборки помещаются в каталог Bin. Любой встроенный код, то есть код, заключенный < в квадратные скобки % и %>, включается в разметку и не компилируется. Компилятор создает новые файлы, содержащие разметку с тем же именем, что и исходные файлы. Эти результированные файлы помещаются в каталог Bin. Компилятор также создает файлы с тем же именем, что и исходные файлы, но с расширением . COMPILED, содержащие сведения о сопоставлении. Teh. ФАЙЛЫ COMPILED помещаются в выходные каталоги, соответствующие исходному расположению исходных файлов.
.ascx Эти файлы разбиваются на разметку и исходный код. Исходный код компилируется в сборки и помещается в каталог Bin с именами, производными от алгоритма хэширования. Файлы разметки не создаются.
.cs, .vb, .jsl, .cpp (не включая файлы кода программной части для перечисленных ранее типов файлов) Исходный код, на который ссылаются сборки, созданные из файлов ASCX, ASHX или ASPX, компилируется в сборки и помещается в каталог Bin. Исходные файлы не копируются.
Пользовательские типы файлов Эти файлы компилируются как динамические файлы. В зависимости от типа файла, на основе которых они основаны, компилятор может размещать файлы сопоставления в выходных каталогах.
Файлы в подкаталоге App_Code Файлы исходного кода в этом подкаталоге компилируются в сборки и помещаются в каталог Bin.
Файлы в подкаталоге App_GlobalResources Эти файлы компилируются в сборки и помещаются в каталог Bin. В выходном каталоге main не создается подкаталог 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 должно компилировать сборку для каждого исходного файла, а не использовать , в котором несколько страниц компилируются в сборки. Это может привести к большому количеству сборок, поэтому, если вас интересует масштабируемость, следует использовать этот параметр с осторожностью.

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

Параметры -aptca, -delaysign, -keycontainer и -keyfile предоставляются, чтобы можно было использовать Aspnet_compiler.exe для создания сборок со строгими именами без использования средства строгих имен (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. Добавьте новый элемент управления Кнопка в Default.aspx.
  3. Измените идентификатор элемента управления Кнопка на 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. Обратите внимание, что элемент управления Метка отображает текущее состояние отладки.
  2. Дважды щелкните элемент управления Кнопка в конструкторе и добавьте следующий код в событие Click для элемента управления Button:
compilation.Debug = !_debugStatus;
config.Save();
lblDebugStatus.Text = "Debug set to: " + compilation.Debug.ToString();
  1. Сохраните файл default.aspx и нажмите кнопку .
  2. Откройте файл web.config после каждого нажатия кнопки и просмотрите атрибут debug в разделе компиляции<>.

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

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

  1. Добавьте DropDownList в default.aspx и измените идентификатор на ddlLogAppEvents.
  2. Задайте для свойства AutoPostBack для DropDownList значение true.
  3. Добавьте три элемента в коллекцию Items для DropDownList. Введите текст для первого элемента Выберите значение и значение -1. Установите значения Text и Value второго элемента 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. Нажмите кнопку, чтобы изменить атрибут Debug для приложения.

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

    1. Регистрировались ли какие-либо события?
    2. Да или нет, и почему?
  6. Задайте для раскрывающегося списка значение True.

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

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

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

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

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