5

Windows 2008 R2 サーバーと、Classic .NET AppPool を使用して、IIS の既定の Web サイトで ASP.Net 2.0 Web アプリを実行しています。その下には、ASP.NET v4.0 統合パイプライン AppPool を使用して MVC 3 を実行する仮想アプリがあります。

アプリケーション プールが自動的にリサイクルされた後、MVC 仮想アプリが失敗することがよくあります。修正は、ASP.NET 4.0 AppPool を手動でリサイクルすることです。一度リサイクルするだけで、常に問題が解決します。

私が受け取るアプリケーション エラーは、アセンブリが正しく読み込まれていないときに発生するエラーのようです。それらは、NullReferenceExceptionコントローラーObject reference not set to an instance of an objectとビューモデルで構成されています。

問題は、問題を適切にデバッグするためにオンデマンドでこれを再現できないことです。アプリケーション プールのリサイクルの順序が問題になるのではないかと考えたので、クラシック プールを毎晩午前 1 時に再起動し、統合プールを午前 1 時 15 分に再起動するように設定しました。残念ながら、これは役に立ちませんでした。

オンデマンドで読み込まれるアセンブリに関するこの回答は興味深いものですが、エラーがめったに発生せず、一見ランダムに発生する理由がわかりません。

問題を一貫して再現する方法、および/または潜在的な解決策を知っている人はいますか? ありがとうございました。

サンプル スタック トレースを含めるように更新します。

Exception information: 
    Exception type: NullReferenceException 
    Exception message: Object reference not set to an instance of an object.
   at Bookstore.Controllers.BooksController.<>c__DisplayClass78.<Details>b__76(Grade g)
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at Bookstore.Controllers.BooksController.Details(String booktitle)
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__4(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
4

1 に答える 1

1

複数のスタック トレースを確認した後、原因は常に Entity Framework にあるように見えました。

この質問は、私たちが見つけたものと非常によく似ていました。同様の理論があります。ASP.Net がアセンブリをロードする順序で競合状態が発生し、Entity Framework が「壊れる」ことがあるというものです。前述の回答を実装しましたが、これまでのところ機能しています。イライラする部分は、問題を一貫して再現することができなかったことです。そのため、修正が機能したかどうかは時間が経てばわかります.

于 2013-08-19T17:41:21.983 に答える