C# .Net Windows服务引发事件类型clr20r3 system.data.sqlclient.sql错误

C# .Net Windows服务引发事件类型clr20r3 system.data.sqlclient.sql错误,c#,sql,windows-services,sqlclient,C#,Sql,Windows Services,Sqlclient,我有一个.Net/c#2.0 windows服务。入口点被包装在一个try-catch块中,该块通知我出现问题,并允许服务继续正常运行。但是,当我查看服务器的应用程序事件日志时,我看到许多“EventType clr20r3”错误导致服务意外死亡。catch块有一个“catch(Exception ex)”,并且不会重新引发异常 每个sql命令都属于“CommandType.StoredProcedure”类型,并使用SqlDataReader执行。这些存储过程调用99%的时间都正常运行,并且都

我有一个.Net/c#2.0 windows服务。入口点被包装在一个try-catch块中,该块通知我出现问题,并允许服务继续正常运行。但是,当我查看服务器的应用程序事件日志时,我看到许多“EventType clr20r3”错误导致服务意外死亡。catch块有一个“catch(Exception ex)”,并且不会重新引发异常

每个sql命令都属于“CommandType.StoredProcedure”类型,并使用SqlDataReader执行。这些存储过程调用99%的时间都正常运行,并且都经过了彻底的单元测试、分析和QA。我另外将这些调用包装在try-catch块中,以确保仍然遇到这些未处理的异常

这只能在我们的生产环境中进行,并且不能在我们的开发或登台环境中进行复制(即使在重载情况下)

为什么我的错误处理无法捕获此特定错误?是否有更多关于问题根本原因的详细信息?

以下是事件日志的示例:

另外


此错误很可能发生在入口点以外的线程上

您还需要以某种方式为后台线程定义异常处理

如果使用WCF包装服务,则可以定义如何处理故障和其他异常。这就是您托管服务的方式吗


编辑:如果您没有异步生成任何内容,并且它不是WCF/etc应用程序,请尝试处理AppDomain.UnhandledException并将详细错误记录在那里。

根据评论回答。很高兴能帮上忙。:)

你试过添加一个 AppDomain.UnhandledException事件 处理程序? msdn.microsoft.com/en-us/library/… 问题是你有一个 中某个位置的未处理SQL异常 你的密码

不一定,但看不见 您的代码或您正在使用的库 使用时,无法知道 例外情况发生在另一个国家 线程、第三方库中的线程等。。。 通过连接 AppDomain.UnhandledException处理程序, 您至少应该能够记录 异常详细信息,并找出其中的位置 你的问题是。就投 EventArg到 ((异常)例如,异常对象) 你至少应该有一个更好的 知道你未处理的异常在哪里吗 是


是否确定事件日志中没有记录其他异常?是否尝试添加AppDomain.UnhandledException事件处理程序?问题在于,您的code.Positive中有一个未处理的SQL异常。我只看到一对指示上述错误的消息和一条指示服务已重新启动的消息。Serapth…我没有看到。我会试试看。这可能是答案的一部分。您是否在指出system.data.sqlclient.sql可能会启动自己的appdomain?我看到您提到将调用放入try-catch块中。。。这是下面的一个实现吗?他说这是一个Windows服务,不是一个Web(或其他通信)服务。我也将所有sql调用包装在try-Catch中。我不会从这些调用中启动任何线程,也不会进行任何其他类型的异步调用。正如Adam提到的,这是一个Windows服务。仅仅因为它是一个Windows服务并不意味着你没有使用远程处理或WCF——你可以很容易地在Windows服务中托管这些东西。我做了区分,因为没有任何理由认为它是一个WCF服务。蹄子、斑马等等。
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.