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

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

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

Раздел компиляции включает важные параметры для оптимизации компиляции страниц ASP.NET. Ниже приведены ключевые моменты, связанные с работой в разделе <compilation>.

  • Свойства strict и explicit элемента <compiler> позволяют установить в значение true опции Visual Basic strict и explicit для всех ваших файлов ASP.NET.
  • Пакетная компиляция помогает сделать работу пользователя более "гладкой", позволяя скомпилировать еще не откомпилированные страницы ASP.NET при первом доступе к одной из них.
  • Элемент <compiler> позволяет добавлять языки (даже COBOL.NET!) для программирования ASP.NET.
  • Раздел <assemblies> позволяет добавлять сборки, подключаемые при компиляции страниц ASP.NET.

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

Раздел <customErrors> позволяет управлять сообщениями об ошибках, выводимыми пользователям. Это очень важный шаг при разработке дружественных к пользователю приложений. Имеется два типа ошибок, возвращаемых пользователям.

  • Ошибки HTTP. Ошибки HTTP генерируются по нескольким причинам, включая отсутствие запрашиваемой страницы (404) или отсутствие прав доступа к запрашиваемой странице (403).
  • Ошибки кода. Ошибки в вашем коде могут возникнуть из-за проблем с подключением к базе данных, неверным преобразованием типов данных или какой-либо недопустимой процедурой.

По умолчанию оба типа ошибок выдают пользователям отвратительные сообщения об ошибках. Это вопрос не только эстетический, но также и вопрос безопасности, так как сообщение об ошибке может включать информацию об имени пользователя или пароле. Элемент <customErrors> имеет два свойства: свойство mode и свойство defaultRedirect. Ниже приведен синтаксис элемента <customErrors>.

<customErrors mode="On" defaultRedirect="customerror.aspx">
</customErrors>

Свойство mode определяет, когда должны отображаться "дружественные" сообщения об ошибках, а когда – настоящие. Таблица 4.7 содержит список возможных значений свойства mode.

Таблица 4.7. Значения свойства mode
Значение Описание
On Разрешает настройку ошибок. Если не указана страница defaultRedirect, пользователям представляется стандартное сообщение об ошибке. Стандартное сообщение не определяет причину ошибки, а только отражает сам факт ее возникновения. (Сообщение об ошибке большое и желтое; позже вы узнаете, как изменить его внешний вид.)
Off Отключает настройку ошибок. В этом случае пользователи при возникновении ошибки увидят полное сообщение об ошибке. Хотя это нежелательно при регулярном использовании вашего приложения, такая информация неоценима на этапах разработки и отладки.
RemoteOnly Является комбинацией двух предыдущих значений: параметр RemoteOnly представляет полное детализированное сообщение об ошибке, когда доступ к приложению осуществляется с системы, на которой оно размещено, а при доступе к нему с других систем отображает дружественное сообщение об ошибке. Если вы занимаетесь разработкой на той же машине, на которой расположено ваше приложение, это значение будет очень полезным, так как оно не потребует внесения изменений, когда вы перейдете от разработки к эксплуатации.

Когда приложение находится на стадии разработки, вы захотите видеть полные сообщения об ошибках, так что установите режим в значение Off или RemoteOnly. Когда начинается регулярная эксплуатация приложения, важно установить режим в значение On или RemoteOnly, так что пользователи не увидят подробных сообщений об ошибках.

При установке режима в значение RemoteOnly или Off пользователь видит стандартное сообщение об ошибке (большую отвратительную желтую страницу). Было бы здорово иметь возможность настраивать это стандартное сообщение и, возможно, включать в него логотип компании или информацию о технической поддержке. Свойство defaultRedirect используется для отображения стандартного сообщения об ошибке со страницы, отличной от страницы по умолчанию. Таким образом, вы можете создать для своего приложения собственное сообщение об ошибке, а затем указать URL этой страницы в свойстве defaultRedirect элемента <customErrors>, например:

<customErrors mode="On" defaultRedirect="customerror.aspx">
</customErrors>

При возникновении в приложении ошибки пользователь вместо подробного или стандартного сообщения об ошибке увидит customerror.aspx.

Настройка сообщений об ошибках HTTP

Можно еще больше поработать над сообщением об ошибке, используя элемент <error> для перенаправления отдельных ошибок HTTP на собственные страницы ошибок. Элемент <error> позволяет указать конкретный код ошибки HTTP и страницу, на которую будут перенаправляться пользователи. Ниже приведен синтаксис элемента <error>.

<customErrors mode="On" defaultRedirect="customerror.aspx">
  <error statusCode="HTTP status code" redirect="httperror.aspx" />
</customErrors>

Таблица 4.8 содержит перечень свойств элемента <error>.

Таблица 4.8. Свойства <error>
Свойство Описание
statusCode Определяет код HTTP, к которому относится данное перенаправление. При каждом возникновении такого типа ошибки пользователь будет перенаправлен на URL, указанный в свойстве <redirect>.
redirect Определяет URL, на который будет перенаправлен пользователь.

Элемент <error> позволяет настроить сообщения об ошибках для каждого типа кодов HTTP. Например, можно создать различные сообщения об ошибках для кодов ошибок 404 и 403. Для кода ошибки 404 можно отображать сообщение, содержащее метод поиска страницы, которая не найдена. Для кода ошибки 403, скорее всего, следует предоставить пользователю информацию о регистрации в системе или способе получения информации о забытом пароле.

Дополнительная информация. С помощью метода Application_Error из файла global.asax можно добавить в приложения собственную обработку ошибок. Данный вопрос выходит за рамки книги, но это эффективный метод перехвата всех ошибок, возникающих в приложении, и отправки пользователю другой страницы или генерации сообщения e-mail об этой ошибке. Поищите информацию по этой процедуре по следующему URL: http://msdn.microsoft.com

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

Раздел <customErrors> позволяет настраивать сообщения об ошибках, которые отправляются пользователям.

  • Свойство mode элемента <customErrors> позволяет указать тип ошибок, отображаемым пользователям.
  • Свойство defaultRedirect позволяет указать собственную страницу ошибки, на которую пользователи перенаправляются при ее возникновении.
  • Элемент <error> позволяет широко настраивать сообщения об ошибках, указывая собственные страницы ошибок для конкретных кодов ошибок.

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

ASP.NET имеет возможность обрабатывать запросы, ответы и файлы, используя для этого различные методы кодирования символов (кодировок). Раздел <globalization> позволяет указать тип кодировки и культуру для различных операций ASP.NET. Ниже приведен синтаксис раздела <globalization>.

<globalization requestEncoding="encoding type"
  responseEncoding="encoding type" fileEncoding="encoding type"
  culture="culture value" uiCulture="culture value" />

Таблица 4.9 содержит перечень свойств раздела <globalization>.

Таблица 4.9. Свойства <globalization>
Свойство Описание
requestEncoding Определяет ожидаемый тип кодировки для входящих запросов, включая данные строк запроса и почтовых сообщений. Это значение может быть переопределено с помощью значения Accept-Charset заголовка сообщения. По умолчанию равно UTF-8.
responseEncoding Определяет тип кодировки, используемой для ответа на запросы. Значение по умолчанию – UTF-8.
fileEncoding Определяет тип кодировки различных типов файлов ASP.NET, включая aspx, .asmx и .asax.
culture Определяет культуру по умолчанию для входящих веб-запросов. В приложении B приведен список доступных параметров культуры.
uiCulture Определяет культуру по умолчанию для запросов на поиск, зависящих от локальных установок.

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

<globalization requestEncoding="utf-8" responseEncoding="utf-8"
  fileEncoding="utf-8" culture="en-us" uiCulture="en-us" />

Данная запись устанавливает кодировки запросов, ответов и файлов в значение UTF-8, а культуру – в значение English.

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

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

Глобализация играет важную роль в разработке приложений для содержащего множество культур интернет-сообщества.

  • Можно задать тип кодировки запросов, ответов и файлов ASP.NET, используя свойства элемента <globalization>.
  • Можно задать культуру веб-запросов, используя свойство culture элемента <globalization>.

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

Обработчики HTTP – это классы, которые обрабатывают HTTP-запросы для конкретного расширения файла, почти как расширения ISAPI. Обработчики HTTP существуют для aspx, .asmx, .rem и многих других расширений файлов ASP.NET по умолчанию. Раздел <httpHandlers> на основе действия HTTP, расширения файла и URL ресурса ставит в соответствие запросам HTTP корректный обработчик HTTP. Раздел <httpHandlers> – это еще один основанный на коллекции раздел, то есть в него можно добавлять и удалять элементы, очищать весь раздел полностью. Ниже приведен синтаксис добавления в раздел <httpHandlers> соответствий обработчиков HTTP.

<httpHandlers>
  <add verb="http verb list" path="url path" type="handler class"
    validate="true|false" />
</httpHandlers>

Таблица 4.10 содержит перечень свойств раздела <httpHandlers>.

Таблица 4.10. Свойства <httpHandlers>
Свойство Описание
verb Список разделенных запятыми действий HTTP, к которым относится это соответствие. Для связи с обработчиком всех действий HTTP используйте знак подстановки " * ".
path Здесь указывается URL, к которому относится это соответствие. Обычно путь – это шаблон, включающий все файлы с конкретным расширением, например *.aspx.
type Класс или сборка .NET, содержащая обработчик HTTP.
validate Значение, указывающее, когда ASP.NET загружает класс обработчика HTTP. При установке его в false ASP.NET не загружает класс обработчика HTTP, пока не придет запрос, подпадающий под действия критерия соответствия запроса. При установке его в значение true этот класс будет загружен при первоначальной обработке настроечного файла.

Ниже показан пример соответствия обработчика .aspx.

<httpHandlers>
  <add verb="*" path="*.aspx"
    type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>

Когда с помощью одного из действий HTTP выполняется запрос к странице с расширением .aspx, страница обрабатывается обработчиком HTTP System.Web.UI.PageHandlerFactory. Удалить соответствие обработчика HTTP можно так:

<httpHandlers>
  <remove verb="*" path="*.aspx"
    type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>

Для сброса всех соответствий обработчиков, добавленных в предыдущие настроечные файлы, используется популярный элемент <clear />.

<httpHandlers>
  <clear />
</httpHandlers>

Теперь давайте рассмотрим, как создавать собственный обработчик HTTP для нового типа расширений.

Создание собственного обработчика HTTP

ASP.NET облегчает создание собственных обработчиков HTTP, которые могут обрабатывать запросы для собственных расширений файлов или путей файлов. В этом разделе вы научитесь создавать простой обработчик HTTP и поставите его в соответствие новому расширению .asbx. Имеется три типа обработчиков HTTP: синхронные, асинхронные и фабрики обработчиков. Синхронный обработчик обрабатывает весь запрос перед отправкой результатов пользователю. Асинхронный обработчик обрабатывает длинные запросы и позволяет отправлять информацию к пользователю на различных этапах обработки запроса. Фабрика обработчиков HTTP генерирует несколько обработчиков в зависимости от запроса. Файлы .aspx обрабатываются обработчиком из фабрики обработчиков HTTP, так что каждый запрос может быть передан в класс страницы для каждого файла. Класс страницы реализует интерфейс IHttpHandler и является обработчиком для каждой страницы.

Собственный обработчик HTTP – это класс .NET, который реализует либо интерфейс IHttpHandler, либо интерфейс IHttpAsyncHandler. Первым шагом при создании обработчика является объявление обработчика и реализации его интерфейса.

C#

using System.Web;
public class asbxHandler : IHttpHandler
{
}

VB.NET

Imports System.Web
Public Class asbxHandler
  Implements IHttpHandler
End Class

При реализации интерфейса IHttpHandler следует включить метод ProcessRequest и свойство IsReusable. Если запрос HTTP связан с обработчиком HTTP, он вызывает метод ProcessRequest и передает в него текущий контекст HTTP. Затем можно использовать объект контекста HTTP либо для чтения из запроса, либо для записи ответа.

C#

using System.Web;
public class asbxHandler : IHttpHandler
{
  public void ProcessRequest(HttpContext currentContext)
  {
    HttpResponse currentResponse = currentContext.Response;
    currentResponse.Write("<html><body>");
    currentResponse.Write("You have accessed an .asbx file");
    currentResponse.Write("</body></html>");
  }
}

VB.NET

Imports System.Web
Public Class asbxHandler
  Implements IHttpHandler
  Public Sub ProcessRequest(ByVal currentContext as HttpContext) _
    Implements IHttpHandler
    Dim currentResponse As HttpResponse = currentContext.Response
    currentResponse.Write("<html><body>")
    currentResponse.Write("You have accessed an .asbx file")
    currentResponse.Write("</body></html>")
  End Sub
End Class

Это очень простой метод ProcessRequest – он просто записывает через текущий контекст HTTP с помощью популярного метода Write короткое сообщение для пользователя. Когда пользователь пытается получить доступ к файлу .asbx, расположенному на сервере, вызывается этот обработчик, который отправляет пользователю простое сообщение. Прежде чем обработчик начнет работать, следует реализовать свойство IsReusable. Оно определяет, будет ли обработчик сохраняться в памяти для повторного использования или будет удаляться и воссоздаваться при последующем обращении к нему. Ниже приведен код, который требуется для реализации свойства IsReusable.

C#

using System.Web;
public class asbxHandler : IHttpHandler
{
  public bool IsReusable
  {
    get{return false;}
  }
}

VB.NET

Imports System.Web
Public Class asbxHandler
  Implements IHttpHandler
  Public ReadOnly Property IsReusable() As Boolean Implements _
    IHttpHandler.IsReusable
    Get
      Return False
    End Get
  End Property
End Class

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

Геннадий Щербаков
Геннадий Щербаков

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