Я возвращаюсь снова, потому что решение, которое я добавил с помощью функции «Initialize ()», фактически не запускается после другого теста. Так что на самом деле я нашел способ, который работает правильно.
Проблема «запрос недоступен в этом контексте» в application_start в вашем случае может быть из-за режима приложения «Интегрированный», который является новым из II7 вместо классического режима.
Чтобы увидеть хорошее объяснение, вы можете зайти в блог Майка Володарского Интегрированный режим IIS7: в этом контексте исключение запроса недоступно в Application_Start .
Я копирую / вставляю выдержку, которая может указывать на основную причину:
"* Эта ошибка связана с изменением конструкции в интегрированном конвейере IIS7, из-за которого контекст запроса становится недоступным в событии Application_Start. При использовании классического режима (единственный режим при работе в предыдущих версиях IIS) использовался контекст запроса быть доступным, даже если событие Application_Start всегда предназначалось как глобальное и не зависящее от запроса событие в жизни приложения. Несмотря на это, поскольку приложения ASP.NET всегда запускались при первом обращении к приложению, раньше это было возможно чтобы добраться до контекста запроса через статическое поле HttpContext.Current. * "
Для решения этой проблемы вы можете использовать обходной путь, который перемещает вашу инициализацию первого запроса из Application_Start в BeginRequest и выполняет специфичную для запроса инициализацию для первого запроса.
Хороший пример кода приведен в его блоге:
void Application_BeginRequest(Object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
HttpContext context = app.Context;
// Attempt to peform first request initialization
FirstRequestInitialization.Initialize(context);
}
class FirstRequestInitialization
{
private static bool s_InitializedAlready = false;
private static Object s_lock = new Object();
// Initialize only on the first request
public static void Initialize(HttpContext context)
{
if (s_InitializedAlready)
{
return;
}
lock (s_lock)
{
if (s_InitializedAlready)
{
return;
}
// Perform first-request initialization here
//
// You can use your create profile code here....
//---
s_InitializedAlready = true;
}
}
}