Я выполняю режим IIS 7 Integrated, и я добираюсь
Запрос не доступен в этом контексте
когда я пытаюсь получить доступ к нему в Log4Net связанная функция, которая вызвана от Application_Start
. Это - строка кода, которую я имею
if (HttpContext.Current != null && HttpContext.Current.Request != null)
и исключение выдается для второго сравнения.
Что еще может я проверять кроме проверки HttpContext. Текущий. Запрос на пустой указатель??
Подобный вопрос отправляется, Запрос не доступен в этом исключении контекста когда runnig mvc на iis7.5
но никакой соответствующий ответ там также.
См. Интегрированный режим IIS7: Запрос недоступен в этом исключении контекста в Application_Start :
Исключение «Запрос недоступен в этом контексте» является одним из наиболее {{ 1}} распространенные ошибки, которые могут возникнуть при переводе приложений ASP.NET в интегрированный режим в IIS 7.0. Это исключение происходит в вашей реализации метода Application_Start в файле global.asax, если вы пытаетесь получить доступ к HttpContext запрос , запустивший приложение.
Поскольку в конвейере больше нет контекста запроса во время запуска приложения, я не могу представить, как можно угадать, на каком сервере / порту может быть следующий фактический запрос. заходи. Вы должны сделать это на Begin_Session.
Вот что я использую, когда не в классическом режиме. Накладные расходы незначительны.
/// <summary>
/// Class is called only on the first request
/// </summary>
private class AppStart
{
static bool _init = false;
private static Object _lock = new Object();
/// <summary>
/// Does nothing after first request
/// </summary>
/// <param name="context"></param>
public static void Start(HttpContext context)
{
if (_init)
{
return;
}
//create class level lock in case multiple sessions start simultaneously
lock (_lock)
{
if (!_init)
{
string server = context.Request.ServerVariables["SERVER_NAME"];
string port = context.Request.ServerVariables["SERVER_PORT"];
HttpRuntime.Cache.Insert("basePath", "http://" + server + ":" + port + "/");
_init = true;
}
}
}
}
protected void Session_Start(object sender, EventArgs e)
{
//initializes Cache on first request
AppStart.Start(HttpContext.Current);
}
сделайте это в global.asax.cs:
protected void Application_Start()
{
//string ServerSoftware = Context.Request.ServerVariables["SERVER_SOFTWARE"];
string server = Context.Request.ServerVariables["SERVER_NAME"];
string port = Context.Request.ServerVariables["SERVER_PORT"];
HttpRuntime.Cache.Insert("basePath", "http://" + server + ":" + port + "/");
// ...
}
работает как шарм. this.Context.Request есть ...
this.Request создает исключение намеренно на основе флага