2011-03-21 11 views
19

Usando ASP.NET MVC 3.0 con Visual Studio 2010 (Pre-SP1 y con SP1) y servidor de desarrollo ASP.NET Obtengo el error "No se pueden crear ámbitos de almacenamiento cuando _AppStart es ejecutando "cada vez que depuro. Cuando espero un par de segundos y actualizo el navegador, funciona como se esperaba.No se pueden crear ámbitos de almacenamiento cuando _AppStart se está ejecutando

  • ¿Le sucede esto a todo el mundo?
  • ¿Hay alguna manera de prevenirlo?
  • ¿Debería preocuparme por esto en la producción? (Alojamiento IIS 6/7)

work-item #7828 on codeplex no tiene respuestas oficiales.

completo seguimiento de la pila:

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 
+0

¿Lo obtiene al ejecutar con IIS Express (con VS 2010 SP1) en lugar del estudio de desarrollo web? – Linkgoron

+0

@Linkgoron Acabo de crear un nuevo proyecto MVC3 con VS 2010 SP1 con WebDevServer (no con IIS Express) para verificar que el error ocurra en la plantilla de la solución MVC. Luego cambié el servidor a IIS Express, limpié la solución para asegurarme de que era una compilación nueva y el error ** no ** ocurrió. – recalde

+0

Bueno, como dije en mi publicación más larga, mi * apuesta * es que esto es un problema con el servidor PreApplicationStart + WebDev + registro HttpModule dinámico. De cualquier manera, parece que esto se origina en el servidor WebDev, por lo que la producción es segura ... – Linkgoron

Respuesta

7

Aunque no estoy seguro de por qué sucede esto (que tampoco se puede reproducir este) que podría tener algunas correcciones que pueda probar. Se supone que el WebPageHttpModule (en System.Web.WebPages) establece AppStartExecuteCompleted pero no es así, y es por eso que se obtiene una excepción (todo este trabajo de adivinación se basa en eso).

Así que ... Mirando alrededor del código fuente que CREO que el origen de este error es algo raro con el servidor web de desarrollo y PreApplicationCode + registro dinámico de un módulo (WebPageHttpModule). El Módulo init debe ejecutarse SIEMPRE al inicio de la aplicación, pero por alguna razón I GUESS que no lo hace. Quizás alguien pueda de alguna manera probarlo.

Algunas correcciones que pensé (de nuevo, esto es pura conjetura porque no puedo reproducir esto).

1) intente registrar el módulo WebPageHttpModule estáticamente en WebConfig. actualización He probado esto, y esto no arroja una excepción. Sin embargo, registra DOS httpmodules.

2) Según los comentarios sobre ese hilo que ha vinculado, parece que esto no ocurre en IIS, por lo que trataría de ejecutar bajo IIS Express (en VS 2010 SP1).

Como dije antes, esto es solo trabajo de adivinar. Puede haber otras razones para que el módulo no se ejecute ... Como el servidor web no se reinicia correctamente, incluido algún problema con PreApplicationCode, o no restablece s_appStartExecutedLock en falso en HttpModule, o algo extraño con HttpContext.Items que también podría porque el módulo no se ejecuta ...

2

Acabo de pasar esto por primera vez en mi proyecto ... y tampoco puedo reproducirlo. Pero tengo una teoría:

En un lapso de pensamiento, había declarado un objeto de diccionario estático dentro de una clase de ayuda, y no mucho tiempo después de recompilar recibí este error. Esta es mi declaración:

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

Dado que las variables estáticas son compartidos por toda la aplicación web (no sólo el contexto de la solicitud), estoy pensando en el constructor para el diccionario se estaba disparado mientras App_Start estaba ejecutando. Esto tiene sentido para mí ... ya que App_Start probablemente está configurando toda la sesión y el almacenamiento de la aplicación. Si se construye una variable estática antes de que se configure el almacenamiento ... boom goes the dinamita.

Solo quería lanzar esa teoría por ahí ... tal vez sea la causa ... tal vez no lo es. Pero es algo que merece la pena analizar (ya que los objetos declarados estáticamente como este son peligrosos).

-1

Desconecte la base de datos. No se puede volver a crear cuando una conexión está activa.

Gracias.

3

Esto parece seguir siendo un problema, sin duda utilizando la plantilla MVC 3 en VS 2010 SP1. Para cualquier persona que todavía tiene el problema, he encontrado la solución en la siguiente entrada del blog para trabajar de forma rápida y fiable:

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

+1

Gracias por el enlace. –

+0

Este enlace me arregló el problema. Gracias. – Spencer

+0

¡No hagas esto! El enlace proporciona instrucciones sobre cómo usar la reflexión para encontrar la propiedad interna estática 'AppStartExecuteCompleted' y cambiar su valor a verdadero. Esto es muy malo, ya que cambia el valor de una manera inesperada por el desarrollador original y puede generar problemas inesperados. – Trisped

-2

simple reconstruir solución me ayudó: por favor, trate de limpiar y reconstruir (no estoy seguro "Microsoft" lanzó MVC3 con cualquier error pesado)

Cuestiones relacionadas