アプリケーションの一部で、ここ数日深刻な問題が発生しています。中規模のASP.NETアプリケーションです。エラーを処理するコードがいくつかあります(データベースにログインし、エラーページをユーザーに表示します)。しかし最近、このコードは一部のマシン(すべてではない)で正しく機能しなくなりました。
私はAccessViolationException
からがあることを知っていErrorViewer
ます:
Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7afa2
Faulting module name: KERNELBASE.dll, version: 6.1.7601.17651, time stamp: 0x4e21213c
Exception code: 0xc0000005
Fault offset: 0x000000000000cacd
Faulting process id: 0x1150
Faulting application start time: 0x01cd1e44675765e2
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\system32\KERNELBASE.dll
Report Id: c43403ad-8a37-11e1-b256-005056891270
このエラーは、アプリケーションがエラーページを表示しようとするたびにエラービューアに記録されます。ただし、エラーはmsi
インストーラーを使用してデプロイされたアプリケーションでのみ発生し、dllファイルは暗号化されているため、このアプリケーションをデバッグできません。コードを少し変更して、初期メソッドを単純なワンライナーにリファクタリングしました。
Public Shared Function HandleException(ByVal exception As System.Exception) As Guid
Return New GUID
End Function
しかし、それでもこのメソッドを入力すると、このスタックトレースで例外がスローされました(DebugDiag 1.2を使用して取得)
at (Exception )
at MyApp.Business.Utilities.HandleException(Exception exception)
at ()
at MyApp.BaseUtilities.ErrorSolution()
at (ErrorPage_errorpage , Object , EventArgs )
at MyApp.ErrorPage_errorpage.Page_Load(Object , EventArgs )
at System.EventHandler.Invoke(Object sender, EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb)
at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr managedHttpContext, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
それは私には奇妙に思えました。次に、このメソッド呼び出しを削除すると、突然アプリケーションが正しく機能し始めました(ただし、必要に応じてエラーを処理できませんでした)。重要なのは、まったく同じコードが何年も機能し、少し変更されておらず、一部のマシンでは機能しなくなったということです。
さらに興味深いのは、単純なGUIDを返すだけの、上記で説明した単純なメソッドを呼び出すと、どのようにスローされるのAccessViolation
でしょうか。
誰かが彼らのアプリケーションで同様の問題を抱えていましたか?なぜこのようなことが起こっているのか誰かが私に説明できますか?