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)