0

IIS 7 下的 ASP.NET 应用程序出现以下异常的原因是什么?这是一个未处理的异常,会重新启动整个应用程序。

异常: System.AccessViolationException

消息:试图读取或写入受保护的内存。这通常表明其他内存已损坏。

堆栈跟踪:

   in System.Web.Hosting.UnsafeIISMethods.MgdIsLastNotification(IntPtr pRequestContext, RequestNotificationStatus dwStatus)
   in System.Web.HttpRuntime.FinishRequestNotification(IIS7WorkerRequest wr, HttpContext context, RequestNotificationStatus& status)
   in System.Web.HttpRuntime.OnRequestNotificationCompletionHelper(IAsyncResult ar)
   in System.Web.HttpRuntime.OnRequestNotificationCompletion(IAsyncResult ar)
   in System.Web.HttpAsyncResult.Complete(Boolean synchronous, Object result, Exception error, RequestNotificationStatus status)
   in System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
   in System.Web.HttpApplication.ResumeStepsWaitCallback(Object error)
   in System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   in System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)
   in System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)

[更新]

系统: Windows Web Server 2008 64 位。

应用程序详细信息:不使用页面架构的 ASP.NET 应用程序。它使用自定义 http 同步和异步处理程序处理请求。还有来自 ThreadPool 或由 Thread 类创建的并行线程正在运行。

4

3 回答 3

0

在这种情况下,硬件错误有时是意外的罪魁祸首。一切都可以完美运行,除了一个不起眼的 DLL 中的一个小方法。

或者这是否也发生在多台机器上?尝试不同的。

于 2009-06-09T13:25:13.830 回答
0

第三方 ISAPI 筛选器可能会导致此问题。

于 2009-05-08T21:57:47.070 回答
0

当我的函数返回时我遇到此问题,IHttpHandler.ProcessRequest()而我仍然对or进行WriteAsync()FlushAsync()操作(即,当我没有等待从这些函数返回时)。HttpResponseHttpResponse.OutputStreamTask

虽然您的问题是在将 async/await 引入 C# 之前编写的,因此您不会一直使用这些关键字,但听起来您确实在执行很多异步操作(异步处理程序、并行线程等),所以我我敢打赌,这很有可能与您遇到的潜在问题相同。

在某些情况下,它可能只是一个错误,您的请求处理程序无法确保WriteAsync()orFlushAsync()操作完成,并且代码修复应该只是确保您在从ProcessRequest(). 但是,就我而言,我将WriteAsync()or包装在一些自定义超时逻辑中,并且在客户端没有及时响应的情况下FlushAsync() Task故意不等待底层。Task

在我的本地计算机(Windows 1809,.NET 4.7.2)上,我似乎可以保留我的自定义超时逻辑,同时通过HttpContext.Request.Abort()在我不想等待WriteAsync()orFlushAsync()操作完成时调用来避免此 AccessViolationException。但是,此修复似乎不适用于我测试过的某些 Windows Server 2016 或 2012 R2 服务器。因此,在最近的 Windows 版本中,这种行为有可能发生了变化,尽管我不能 100% 确定没有其他变量可以解释我测试过的机器之间的行为差​​异。

于 2019-02-18T23:49:53.733 回答