2016-11-17 10 views
3

Наш IIS размещается приложение WCF периодически сбой, показывая следующее в случае применения войтидиагностирует NullReferenceException в финализатора потоке

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.

Может кто-нибудь дать подсказку о том, как диагностировать эту проблему?

+0

Может быть, ошибка. Существует общее правило: никаких исключений в финализаторе, независимо от того, в каком состоянии находится объект. Однако подозрительно, что финализатор вызывается для этого «IDisposable». Где-то этот объект не размещается, а затем получает сбор мусора. Убедитесь, что он используется '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – dymanoid

+0

Вы когда-нибудь дошли до конца? У меня такая же проблема. Я заметил, что метод OracleDataReader dispose скрывает реализацию Base, а не переопределяет ее, что делает мои заявления использования довольно бессмысленными. Хотя я не совсем уверен, что это проблема. Так много всего использует OracleDataReader, похоже, проблема может быть и в другом месте. –

+0

К сожалению, время от времени сообщается, что в процессе производства мы пошли по пути изменения нашей архитектуры, чтобы восстановиться после полного перезапуска IIS. – Dominik

ответ

1

В нашем случае мы включить ведение журнала трассировки в app.config или web.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 файл и увидеть много сообщений трассировки, которые должны привести к вашей ошибке.