我的asp.net应用程序有时在实时服务器上已关闭。所有用户都面临黄色错误屏幕。当我深入研究问题时,我找到了踪迹。
引发了类型为'System.Web.HttpUnhandledException'的异常。 =====>静态跟踪====> System.Web.UI.Page.HandleError(Exception e)在System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,布尔值includeStagesAfterAsyncPoint) 在System.Web.UI.Page.ProcessRequest(布尔 includeStagesBeforeAsyncPoint,布尔值includeStagesAfterAsyncPoint) 在System.Web.UI.Page.ProcessRequest()处 System.Web.UI.Page.ProcessRequest(HttpContext上下文)位于 c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary中的ASP.emr_patient_callbacks_ Patientappointments_aspx.ProcessRequest(HttpContext上下文) ASP.NET Files \ root \ 05f0ecab \ db8ea090 \ App_Web_wgoawcvo.0.cs:第0行位于 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep步骤) System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值& 同步完成)
此异常随机发生在特定位置或特定点击上。 但是,当我在IIS上重新启动应用程序时,该应用程序运行正常。但是又几个小时出现了同样的问题。
答案 0 :(得分:2)
仅凭您的堆栈跟踪信息就很难确定地说什么。但这是网站关闭的一种可能解释。
IIS具有称为快速故障保护的功能,它用于尝试保护自己免受不良应用程序的侵害。触发快速故障保护时,IIS将关闭运行错误应用程序的应用程序池。发生这种情况时,即使用户试图访问应用程序,应用程序池也不会自动启动。只有在网络服务器上的管理员手动启动池之后,应用程序才能重新联机。
可以触发快速故障保护的一件事是在短时间内重复出现应用程序崩溃。我认为默认值为5分钟内5次崩溃。
我认为您的应用程序有时会在短时间内抛出几个未处理的异常,从而触发快速故障保护。
要解决此问题,您将必须对应用程序进行编码,以便它不会引发未处理的异常。将 Application_Error 处理程序添加到 Global.asax 来处理和记录异常(未在其他地方捕获到)的异常是很好的开始。
答案 1 :(得分:1)
到目前为止,我从您的异常消息中看到的可能是与此视图 Patientappointments_aspx (或与此名称类似的视图)相关的问题。您需要检查所有关闭问题是否都带有相同的消息,以确保每次都是相同的问题。
如果您有权访问部署环境,则可以通过事件日志进行跟踪。
跟踪此错误的另一个建议是使用更广泛的try-catch组合,该组合将跟踪由应用程序生成的所有异常(这只是确定问题原因的临时解决方案)。为了区分您所处理的例外,您可以创建一个特定的例外,以及那些无法识别为一般例外的例外。
我希望这将有助于您查找问题!
答案 2 :(得分:0)
欢迎来到在圆孔中安装方钉的迷人世界,也就是ASP.NET Web窗体中的异步编程。查看stacktrace,我认为您正在.NET 4.x中使用asp.net Web表单,并在代码库中的某个位置进行了异步编程。
当我不得不在asp.net网络表单(.aspx / .aspx.cs)中使用异步模式时,我花了无数的时间来处理随机死锁。我发现有时页面会永久旋转或像您一样悲惨地倒下。
与MSFT使其与Web表单兼容时允许您进行异步编程的松散程度密切相关。有一种在Web表单中使用Async / Await模式的正确方法,而一种会引起重大问题的错误方法。
我想请您仔细检查代码库,找到使用异步编程的位置。查找关键字“ async”,“ await”,“ Task”等,看看是否正确使用了模式并且没有执行完全错误的操作,例如
public async void Foo(){}
您要么必须在整个请求生命周期中正确执行Async,要么根本不执行。有时,您不得不使用异步方法,例如在我不得不使用以这种方式实现的库或使用异步方法但以同步方式提出要求的情况下,这是一种折衷。
我建议您花一些时间阅读有关此内容的信息。如果您确认自己正在使用Web表单进行异步操作,那么这里有一些链接可以帮助您入门。
https://msdn.microsoft.com/en-us/magazine/jj991977.aspx
https://blog.stephencleary.com/2012/02/async-and-await.html
https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html
How and When to use `async` and `await`
An async/await example that causes a deadlock
您可以做的另一件事是,也要尝试完全隔离IIS何时开始死亡。这将帮助您查明错误的代码路径或页面。在重新启动IIS服务器之前,请先清除IIS日志。下次死亡时,请仔细查看日志文件,最后查看请求的页面。此外,您在事件查看器中看到了什么?有时在那里提供更详细的解释。
顺便说一句,在生产中如何显示“黄色错误页面”?请不要引起更多麻烦,并使用自定义错误页面并显示用户友好的错误消息。
祝您好运,让我们知道您所发现的内容。