Запрос не доступен в этом контексте

Я выполняю режим IIS 7 Integrated, и я добираюсь

Запрос не доступен в этом контексте

когда я пытаюсь получить доступ к нему в Log4Net связанная функция, которая вызвана от Application_Start. Это - строка кода, которую я имею

if (HttpContext.Current != null && HttpContext.Current.Request != null)

и исключение выдается для второго сравнения.

Что еще может я проверять кроме проверки HttpContext. Текущий. Запрос на пустой указатель??


Подобный вопрос отправляется, Запрос не доступен в этом исключении контекста когда runnig mvc на iis7.5

но никакой соответствующий ответ там также.

108
задан Community 23 May 2017 в 12:34
поделиться

3 ответа

См. Интегрированный режим IIS7: Запрос недоступен в этом исключении контекста в Application_Start :

Исключение «Запрос недоступен в этом контексте» является одним из наиболее {{ 1}} распространенные ошибки, которые могут возникнуть при переводе приложений ASP.NET в интегрированный режим в IIS 7.0. Это исключение происходит в вашей реализации метода Application_Start в файле global.asax, если вы пытаетесь получить доступ к HttpContext запрос , запустивший приложение.

77
ответ дан 24 November 2019 в 03:33
поделиться

Поскольку в конвейере больше нет контекста запроса во время запуска приложения, я не могу представить, как можно угадать, на каком сервере / порту может быть следующий фактический запрос. заходи. Вы должны сделать это на 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);
}
7
ответ дан 24 November 2019 в 03:33
поделиться

сделайте это в 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 создает исключение намеренно на основе флага

-4
ответ дан 24 November 2019 в 03:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: