我们有 4 名开发人员(不是专业的服务器管理员),运行 2 台带有 IIS 8.5(Windows server 2012 R2)和 ASP.NET 4 的服务器。
我们每天都会多次在 Windows 事件日志中收到此异常:
Application: w3wp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
at System.Web.Hosting.UnsafeIISMethods.MgdIsLastNotification(IntPtr, System.Web.RequestNotificationStatus)
at System.Web.Hosting.UnsafeIISMethods.MgdIsLastNotification(IntPtr, System.Web.RequestNotificationStatus)
at System.Web.HttpRuntime.FinishRequestNotification(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext, System.Web.RequestNotificationStatus ByRef)
at System.Web.HttpRuntime.OnRequestNotificationCompletionHelper(System.IAsyncResult)
at System.Web.HttpRuntime.OnRequestNotificationCompletion(System.IAsyncResult)
at System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception)
at System.Web.HttpApplication+CallHandlerExecutionStep.OnAsyncHandlerCompletion(System.IAsyncResult)
at System.Threading.Tasks.Task.Execute()
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef)
at System.Threading.Tasks.Task.ExecuteEntry(Boolean)
at System.Threading.ThreadPoolWorkQueue.Dispatch()
事件日志中的下一个条目是:
Faulting application name: w3wp.exe, version: 8.5.9600.16384, time stamp: 0x5215df96
Faulting module name: iiscore.dll, version: 8.5.9600.17224, time stamp: 0x53b1e5a1
Exception code: 0xc0000005
Fault offset: 0x0000000000002c44
Faulting process id: 0x257c
Faulting application start time: 0x01d05f0c93813e6e
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\system32\inetsrv\iiscore.dll
Report Id: 073f9a19-cb13-11e4-80c3-0cc47a02ce53
Faulting package full name:
Faulting package-relative application ID:
它们总是成对出现。我花了几个小时在谷歌上搜索,但不知道这是我们代码中的问题还是外部模块中的问题,以及如何解决。主要问题是我们的一台服务器不时停止响应,所以我真的很想知道这些问题是否是一起出现的。
我们记录了所有异常,但我在日志中找不到它。我还尝试连接远程调试器,但没有收到异常,调试确实减慢了网站速度。
编辑:我检查了所有来源以捕获 m 应用程序中的异常:
- AppDomain.CurrentDomain.未处理异常
- 任务调度器.未观察到的任务异常
- 自定义 Owin 中间件
但是我找不到这个异常。我接下来要尝试的是自定义 http 模块。让我们看看。
我还在事件日志中发现了一些警告,例如:
Exception type: HttpException
Exception message: The remote host closed the connection. The error code is 0x80070057.
或者
Exception type: HttpException
Exception message: A potentially dangerous Request.Path value was detected from the client (:).
这些情况经常发生,我很困惑为什么它们会被添加到事件日志中。
答案1
这可能是 ASPNET 访问问题。
右键“计算机”-->“管理”-->“本地用户和组”-->“组”
找到“DB2ADMNS”和“DB2USERS”组。
将“ASPNET”用户添加到每个组。
答案2
我不会担心
异常类型:HttpException 异常消息:远程主机关闭了连接。错误代码为0x80070057。
这仅仅意味着远端在接收数据时消失了(崩溃了?丢失了连接?谁知道呢)。
我也不担心
异常类型:HttpException 异常消息:从客户端检测到潜在危险的Request.Path值(:)。
这仅意味着您的 URL 包含冒号,这是不允许的。
所以剩下最上面的两条错误消息。问题出在您的自定义应用程序中。
异常代码:0xc0000005
是访问冲突。要么您的应用程序帐户无权访问其所需的所有内容(应用程序池?文件?),要么它试图访问受保护的内存。(有人在这个问题暗示问题也可能是内存故障。) 调试诊断(和/或内存测试实用程序)可能可以帮助您找出问题的原因。
祝你好运!