Подтвердить что ты не робот

Области хранения не могут быть созданы при выполнении _AppStart

Использование ASP.NET MVC 3.0 с Visual Studio 2010 (Pre-SP1 и с пакетом обновления 1) и сервером разработки ASP.NET Я получаю сообщение об ошибке " Области хранения не могут быть созданы при выполнении _AppStart. каждый раз, когда я отлаживаю. Когда я жду пару секунд и обновляю браузер, он работает так, как ожидалось.

  • Это происходит со всеми?
  • Есть ли способ предотвратить это?
  • Должен ли я быть обеспокоен этим в производстве? (Хостинг IIS 6/7)

Связанный рабочий элемент # 7828 на codeplex не имеет официальных ответов.

Полная трассировка стека:

Server Error in '/' Application.
--------------------------------------------------------------------------------
Storage scopes cannot be created when _AppStart is executing. 
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.InvalidOperationException: Storage scopes cannot be created when _AppStart is executing.

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.  

Stack Trace: 
[InvalidOperationException: Storage scopes cannot be created when _AppStart is executing.]
   System.Web.WebPages.Scope.AspNetRequestScopeStorageProvider.set_CurrentScope(IDictionary`2 value) +83361
   System.Web.WebPages.Scope.ScopeStorage.CreateTransientScope(IDictionary`2 context) +95
   System.Web.WebPages.Scope.ScopeStorage.CreateTransientScope() +76
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +84
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50
   System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8862381
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
4b9b3361

Ответ 1

Пока я не уверен, почему это происходит (я также не могу воспроизвести это), у меня могут быть некоторые исправления, которые вы можете попробовать. Предполагается, что WebPageHttpModule (в System.Web.WebPages) должен установить AppStartExecuteCompleted, но это не так, и почему вы получаете исключение (на основе этой работы есть все это).

Итак... Оглядываясь на исходный код, я ВЕРЮ, что источником этой ошибки является что-то подозрительное с сервером веб-разработки и PreApplicationCode + динамическая регистрация модуля (WebPageHttpModule). Модуль init должен ВСЕГДА запускаться при запуске приложения, но по какой-то причине я УГАДАЮ, что это не так. Может быть, кто-то может это проверить.

Некоторые исправления, о которых я думал (опять же, это чистая работа догадки, поскольку я не могу воспроизвести это).

1) попытайтесь зарегистрировать модуль WebPageHttpModule статически в WebConfig. update Я протестировал это, и это не вызывает исключения. Тем не менее, он регистрирует два httpmodules.

2) В соответствии с комментариями к этому потоку, который вы связали, похоже, что этого не происходит в IIS, поэтому я бы попытался запустить под IIS Express (под VS 2010 SP1).

Как я уже говорил, это просто догадка. Могут быть другие причины для того, чтобы модуль не запускался... Например, если веб-сервер не перезагрузился должным образом, включая некоторые проблемы с PreApplicationCode, или не сбросил s_appStartExecutedLock в false в HttpModule или что-то странное с HttpContext.Items, которые могли ТАКЖЕ чтобы модуль не запускался...

Ответ 2

Это все еще проблема, конечно, используя шаблон MVC 3 на VS 2010 SP1. Для тех, у кого до сих пор возникла проблема, я нашел решение в следующем блоге быстро и надежно:

http://www.codinghub.net/2012/12/storage-scopes-cannot-be-created-when.html

Ответ 3

Я просто впервые это случилось в моем проекте... и также не могу воспроизвести. Но у меня есть теория:

По прошествии времени я объявлял статический словарь-объект внутри вспомогательного класса и не слишком долго после перекомпиляции получил эту ошибку. Это мое выражение:

private static Dictionary<string, string> FormatList = new Dictionary<string, string>();

Поскольку статические переменные совместно используются во всем веб-приложении (а не только в контексте запроса), я думаю, что конструктор для словаря запускался во время выполнения App_Start. Это имеет смысл для меня... поскольку App_Start, вероятно, настраивает все хранилище сеансов и приложений. Если статическая переменная создается до того, как будет установлена ​​память... стрела идет динамитом.

Просто хотел бросить эту теорию там... может быть, это причина... может быть, нет. Но это что-то стоит посмотреть (поскольку статически объявленные объекты опасны.)

Ответ 4

Отключите базу данных. Он не может быть воссоздан при активном соединении.

Спасибо.

Ответ 5

Простое решение для перестройки помогло мне: попробуйте очистить и перестроить (не уверен, что "Microsoft" выпустила MVC3 с любой тяжелой ошибкой)