在终结器线程中诊断NullReferenceException

时间:2016-11-17 08:02:07

标签: c# oracle iis idisposable finalizer

我们的IIS托管WCF应用程序定期崩溃,在应用程序事件日志中显示以下内容

Application: w3wp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.NullReferenceException
Stack:
   at Oracle.DataAccess.Client.OracleDataReader.Dispose(Boolean)
   at Oracle.DataAccess.Client.OracleDataReader.Finalize()

这是Oracle.DataAccess 4.121.2.0,我非常怀疑这是一个Oracle错误,而是我们以某种方式破坏了OracleDataReader的状态。

有人可以提示如何诊断此问题吗?

1 个答案:

答案 0 :(得分:1)

在我们的案例中,我们在app.configweb.config中启用跟踪记录,如下所示:

<system.diagnostics>
    <sources>
        <source name="System.ServiceModel" switchValue="All" propagateActivity="true">
            <listeners>
                <add name="xml" />
            </listeners>
        </source>
        <source name="System.ServiceModel.MessageLogging">
            <listeners>
                <add name="xml" />
            </listeners>
        </source>
        <source name="myUserTraceSource" switchValue="Information, ActivityTracing">
            <listeners>
                <add name="xml" />
            </listeners>
        </source>
    </sources>
    <sharedListeners>
      <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\Temp\WcfTrace.svclog" />
    </sharedListeners>
</system.diagnostics>

现在您可以查看WcfTrace.svclog文件并查看可能导致错误的大量跟踪消息。