Миграция Приложении ASP.NET На IIS 7 Интегрированном Режиме (ru-RU)
Введение
Было не мало дискуссий о том, как сделать ваше приложение совместимым с [[Internet Information Services|IIS]] 7 в интегрированном режиме (Integrated Mode). Чтобы знать это, необходимо сначала понять, что такое интегрированный режим и почему мы хотим его использовать.
IIS7 был выпущенный с двумя режимами, классическим (Classic) и интегрированным (Integrated). Классический Режим совместим с предыдущими версиями IIS, в то время как Интегрированный гораздо расширен и поддерживает множество дополнительных функций.
В этой статье я собираюсь объяснить значение ошибки «Request is not available in this context».
«Request is not available in this context» одна из наиболее распространенных ошибок, которые вы можете получить, при перемещении ASP.NET приложения в интегрированный режиме IIS 7.0/7.5. Ошибка возникает в реализации метода Application_Start в файле global.asax, при попытке доступа к HttpContext запроса. Выглядит это примерно так:
Server Error in '/' Application.
Request is not available in this context
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: Request is not available in this context
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
|
As ASP.NET приложения всегда начинаются с первого запроса на приложения; контекст можно дастать через статическое поле HttpContext.Current. В классическом режиме контекст запроса (request context) доступен для использования.
Но изменённый дизайна в интегрированного конвейера IIS7, делает запрос контекста недоступным в событии Application_Start.
Так что если вы хотите получить доступ к контексту запроса в событии Application_Start:
- Либо вы можете переместить приложений в классический режим, что не рекомендуется, или
- Вы можете изменить ваше приложения соответственно.
Если ваш выбор изменить приложение, то сначала необходимо удалить ссылки на HttpContext.Current из Application_Start.
Во-первых, если вы используете HttpContext.Current.Request для получения пути приложения, не используйте request, вместо этого следует использовать HttpRuntime.AppDomainAppVirtualPath.
Смотрите код ниже;
Response.Write(HttpRuntime.AppDomainAppVirtualPath);
Response.Write(HttpContext.Current.Request.ApplicationPath);
Обе линии кода, возвращают одинаковый результат.
Но эсли вы хотите доступ к информаций первого запроса, ниже приведённый пример, даст вам эту возможность.
void Application_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
// Initialise your first request here..
}
Получите контекст и делайте ваши первые шаги инициализации.
В следующей статье мы будут открывая больше о том как мигрировать ASP.NET приложения в IIS 7 интегрированном режиме.
Translated from Migrate ASP.NET Applications to IIS 7 Integrated Mode