我有一个.Net / c#2.0 Windows服务。入口点包含在try catch块中,该块通知我出现问题并允许服务继续正常运行但是当我查看服务器的应用程序事件日志时,我看到一些导致服务死亡的“EventType clr20r3”错误不料。 catch块有一个“catch(Exception ex)”并且不会重新抛出异常。
每个sql命令的类型为“CommandType.StoredProcedure”,并使用SqlDataReader执行。这些sproc调用在99%的时间内正常运行,并且已经过全面的单元测试,分析和QA。我还在try catch块中包含这些调用以确保并且仍然遇到这些未处理的异常。
仅在我们的生产环境中,并且不能在我们的开发或登台环境中复制(即使在负载很重的情况下)。
为什么我的错误处理不会捕获此特定错误?无论如何都要捕获有关问题根本原因的更多细节吗?
以下是事件日志的示例:
EventType clr20r3, P1 RDC.OrderProcessorService, P2 1.0.0.0, P3 4ae6a0d0, P4 system.data, P5 2.0.0.0, P6 4889deaf, P7 2490, P8 2c, P9 system.data.sqlclient.sql, P10 NIL.
此外
The Order Processor service terminated unexpectedly. It has done this 1 time(s). The following corrective action will be taken in 60000 milliseconds: Restart the service.
答案 0 :(得分:4)
回答评论。很高兴有所帮助。 :)
您是否尝试过添加 AppDomain.UnhandledException事件 处理程序? msdn.microsoft.com/en-us/library/... 问题是你有一个问题 某处未处理的SQL异常 你的代码。
不一定,但没有看到 你的代码或你的图书馆 使用,没有办法知道是否 异常发生在另一个 线程,在第三方库等... 通过布线 AppDomain.UnhandledException处理程序, 你应该至少能够记录下来 异常细节并弄清楚在哪里 你的问题点是。刚刚施展 EventArg to ((例外)e.ExceptionObject).Message 而你至少应该有一个更好的 想法你未处理的例外 是
答案 1 :(得分:1)
此错误最有可能发生在您的入口点以外的其他线程上。
您还需要以某种方式为后台线程定义异常处理。
如果您使用WCF来包装服务,则可以定义如何处理故障和其他异常。这是你如何托管你的服务?
编辑:如果您没有异步生成任何内容,并且它不是WCF / etc应用程序,请尝试处理AppDomain.UnhandledException并在那里记录详细错误。