Опубликован: 24.01.2007 | Доступ: свободный | Студентов: 1253 / 82 | Оценка: 4.37 / 4.17 | Длительность: 14:27:00
ISBN: 978-5-94774-627-3
Лекция 4:

Настроечные параметры System.Web

Настройка сообщения Server Unavailable (Сервер не доступен)

Наиболее важным моментом при разработке первоклассного веб-приложения является гарантия того, что пользователи не увидят непрофессионально выглядящих сообщений об ошибках. Первым шагом в перехвате ошибок в коде приложения является перехват ошибок http, а следующим – предоставление дружественных сообщений об ошибках при перезапуске или временной недоступности приложения. Ниже приведена процедура настройки сообщения об ошибке.

  1. С помощью свойства serverErrorMessageFile настройте раздел <processModel> так, чтобы он указывал на нужный файл. Этот файл содержит сообщение, которое следует отображать пользователям.
  2. Создайте файл, который не обрабатывается процессом ASP.NET, и поместите его в то место, на которое указывает настроечный файл.

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

Запуск ASP.NET на контроллере домена

При запуске ASP.NET на контроллере домена имеются специфические проблемы. Если вы впервые устанавливаете ASP.NET на контроллере домена и пытаетесь получить доступ к приложению ASP.NET, то получите сообщение об ошибке Server Application Unavailable (Серверное приложение недоступно), так как по умолчанию ASP.NET выполняется под локальной учетной записью системы, отсутствующей на контроллере домена. Для настройки успешного выполнения ASP.NET на контроллере домена имеется две возможности.

  • Настроить ASP.NET на работу с системной учетной записью, установив свойство username в значение System, что позволяет ASP.NET выполняться в системе с правами администратора. Этот, в общем-то, правильный подход не совсем хорош, так как дает ASP.NET полный контроль над контроллером домена.
  • Настроить ASP.NET на использование для входа в контроллер домена ограниченной учетной записи домена. Этот подход лучше, так как уменьшает риск, связанный с безопасностью.

Ниже приведена процедура для корректного создания и настройки этой учетной записи.

  1. Создайте на контроллере домена учетную запись и добавьте ее в группу пользователей.
  2. Дайте этому пользователю право на вход в качестве пакетного задания.
  3. Убедитесь, что этот пользователь имеет доступ ко всем требуемым директориям, включая все директории приложения ASP.NET.
  4. При помощи свойств username и password раздела <processModel> установите имя пользователя и пароль учетной записи.

Разрешение проблем с взаимными блокировками ASP.NET

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

Ключевые моменты <processModel>

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

Работа с разделом <securityPolicy>

Раздел <securityPolicy> – это соответствия имен уровней безопасности и файлов политики безопасности. Файлы политики безопасности содержат параметры безопасности, относящиеся к ASP.NET. Раздел <securityPolicy> содержит только один элемент, который называется <trustLevel>. Ниже приведен его синтаксис.

<securityPolicy>
  <trustLevel name="security name"
    policyFile="security policy file" />
</securityPolicy>

Свойства этого раздела приведены в табл. 4.18.

Таблица 4.18. Свойства <securityPolicy>
Свойство Описание
name Определяет имя уровня безопасности, с которым связан файл политики. Возможные значения: Full (полный), High (высокий), Medium (средний), Low (Низкий) и Minimal (Минимальный). Значение Full не требует связывания с ним файла политики.
policyFile Определяет настроечный файл, который содержит параметры безопасности для данного уровня безопасности.

Ниже показан пример раздела <securityPolicy>.

<securityPolicy>
  <trustLevel name="Full" policyFile="internal" />
  <trustLevel name="High" policyFile="web_hightrust.config" />
  <trustLevel name="Medium" policyFile="web_mediumtrust.config" />
  <trustLevel name="Low" policyFile="web_lowtrust.config" />
  <trustLevel name="Minimal"
    policyFile="web_minimaltrust.config" />
</securityPolicy>

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

Ключевые моменты <securityPolicy>

  • Элемент <trustLevel> ставит соответствие между дружественным именем уровня доверия и файлом политики безопасности, содержащим параметры.
  • Дружественные имена уровней доверия используются в разделе <trust> для указания разделов безопасности, под которыми должно выполняться приложение.

Работа с разделом <sessionState>

Раздел <sessionState> содержит параметры для настройки ASP.NET при работе с сессиями. Вы можете настроить сохранение сессий на локальной машине, на удаленном сервере состояний или на удаленном SQL-сервере. В разделе имеется несколько свойств, но вам потребуется только одно. Ниже приведен его синтаксис и значения.

<sessionState mode="session mode" />

Возможные значения свойства mode приведены в табл. 4.19.

Таблица 4.19. Значения свойства mode
Значение Описание
Off Определяет, что состояние сессий отключено.
InProc Определяет, что состояние сессий и информация о сессиях хранится локально.
StateServer Определяет, что состояние сессий и информация о сессиях хранится на удаленном сервере.
SQLServer Определяет, что состояние сессий и информация о сессиях хранится на удаленном SQL-сервере.

Есть еще два свойства в этом разделе, которые применяются ко всем режимам состояний сессии. Ниже приведен их синтаксис.

<sessionState mode="session mode" cookieless="true | false"
  timeout="amount of time" />

Описание этих свойств приведены в табл. 4.20.

Таблица 4.20. Свойства cookieless и timeout
Свойство Описание
cookieless Определяет использование cookies для идентификации клиентских сессий.

true Указывает, что при управлении сессиями cookies использоваться не будут.

false Указывает, что при управлении сессиями будут использоваться cookies.

timeout Определяет количество времени простоя сессии перед ее удалением. Значение по умолчанию – 20 минут.

Ниже показан пример того, как следует использовать эти свойства.

<sessionState mode="InProc" cookieless="true" timeout="20" />

Данные сессии вашего приложения будут храниться локально и не будут использовать cookies. Если сессия простаивает в течение 20 минут, сессия и все ее данные будут удалены.

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

Сервер состояний позволяет настраивать один из серверов вашей веб-формы как специализированный сервер состояний сессий. Он отслеживает состояние и данные сессий для всех других серверов. Это очень важно, так как в противном случае вы не будете знать, какой сервер обрабатывает каждый запрос пользователей. Таким образом, вне зависимости от того, какой сервер обрабатывает запрос, информация о сессии сохранятся на специальном сервере, а затем берется с него. Сервер состояний по-прежнему обрабатывает веб-запросы, пока не окажется перегружен информацией о сессиях. Первым шагом в настройке приложения на использование сервера состояний является установка свойства mode в значение StateServer. Затем нужно настроить два дополнительных свойства в разделе <StateServer>. Ниже приведен их синтаксис.

<sessionState mode="StateServer" stateConnectionString=
  "connection string" stateNetworkTimeout="amount of time" />

В таблице 4.21 приведен перечень значений этих свойств.

Таблица 4.21. Свойства сервера состояний
Свойство Описание
stateConnectionString Определяет строку соединения с сервером состояний в следующем формате: "tcpip=192.168.31.0:42424"
stateNetworkTimeout Определяет время простоя (в секундах) соединения по протоколу TCP/IP перед удалением сессии. Значение по умолчанию – 10 с.

Ниже показан пример раздела <sessionState>, настроенного на работу с сервером состояний.

<sessionState mode="StateServer" stateConnectionString=
  "tcpip=192.168.31.0:42424" stateNetworkTimeout="15" />

Единственным дополнительным шагом является настройка сервера, который будет играть роль сервера состояний. Запустите службу сервера состояний – через оснастку Services MMC или при помощи следующего файла.

<drive>:\%windir%\Microsoft.NET\Framework\version\aspnet_state.exe

После этого на удаленном сервере начнет работать сервер состояний, и его можно будет использовать с других серверов.

Настройка SQL-сервера состояний

Еще одним методом поддержки состояний для нескольких серверов или в веб-ферме является использование SQL-сервера. Первым шагом является настройка сервера в ферме на работу в качестве сервера состояний сессий. Для этого запустите сценарий InstallSQLState.sql, расположенный в директории <drive>:\%windir%\Microsoft.NET\Framework\ version. Он должен быть запущен на сервере, где работает SQL-сервер. Я создам базу данных с именем ASPState, включающую таблицы, хранимые процедуры и прочее, что требуется для запуска SQL-сервера состояний. Следующий шаг состоит в настройке приложения на использование SQL-сервера состояний. Ниже приведен синтаксис этой настройки.

<sessionState mode="SQLServer"
  sqlConnectionString="connection string" />

В таблице 4.22 приведены значения данного свойства.

Таблица 4.22. Свойство SQL-сервера состояний
Свойство Описание
sqlConnectionString Определяет строку соединения, используемую для соединения с SQL-сервером состояний.

Ниже показан пример раздела, настроенного на работу с SQL-сервером состояний.

<sessionState mode="SQLServer" sqlConnectionString=
  "data source=192.168.0.1;Integrated Security=SSPI" />

Данные состояния сессии для этого сервера будут храниться в SQL-сервере, расположенном по адресу 192.168.0.1.

Ключевые моменты <sessionState>

  • Свойство mode позволяет настраивать приложения на хранение информации о сессиях локально, на сервере состояний или на SQL-сервере.
  • Свойство cookieless позволяет настраивать приложение на запись информации о сессиях без использования cookies.
  • Сервер состояний позволяет выделить один веб-сервер под сервер состояний сессий и использовать его другими веб-серверами. Это снимает часть нагрузки на другие веб-серверы и делает программирование для веб-ферм более простым.

Работа с разделом <trace>

Раздел <trace> позволяет настраивать разделы трассировки уровня машины, приложения или сайта. Трассировка – это одна из наиболее полезных функций, представленных в ASP.NET. Она позволяет увидеть большое количество информации о компиляции и отладке страницы. Ниже приведен синтаксис раздела <trace>.

<trace enabled="true | false" localOnly="true | false"
  pageOutput="true | false" requestLimit="number"
  tracemode="sort by method" />

Свойства раздела <trace> перечислены в табл. 4.23.

Таблица 4.23. Свойства раздела <trace>
Свойство Описание
enable Определяет включение трассировки для приложения.

true Указывает, что трассировка включена.

false Указывает, что трассировка отключена.

localOnly Определяет доступность средства просмотра трассировки только на данном сервере.

true Указывает, что средство просмотра трассировки доступно только локально (значение по умолчанию).

false Указывает, что средство просмотра трассировки доступно удаленно.

pageOutput Определяет добавление вывода трассировки в конец каждой страницы.

true Указывает, что в конец каждой страницы добавляется вывод трассировки.

false Указывает, что вывод трассировки в конец каждой страницы не добавляется (значение по умолчанию).

requestLimit Определяет количество запросов на трассировку, которые сервер может обработать перед тем, как она будет автоматически отключена. Значение по умолчанию – 10.
tracemode Определяет метод, используемый для сортировки трассировочной информации.

SortByTime Указывает, что трассировочная информация сортируется по времени ее обработки.

SortByCategory Указывает, что трассировочная информация сортируется в алфавитном порядке категорий.

Ниже показан пример раздела <trace>.

<trace enabled="true" localOnly="true" pageOutput="false"
  requestLimit="10" tracemode="SortByTime" />

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

Ключевые моменты <trace>

  • Вы можете указать, будет ли включена трассировка и как она будет себя вести.
  • Свойство localOnly позволяет включать трассировку только для локальных запросов.
  • Свойство pageOutput позволяет указать, будет ли трассировочная информация добавляться в конец каждой страницы, или она будет доступна только через средство просмотра трассировки.
Геннадий Щербаков
Геннадий Щербаков

В начале года получил код dreamspark  H4RQ9-QJ6FD-YJWJT-P6FVF-HGXQZ. При  его вводе- сообщение что он просрочен.