2013-07-29 257 views
0

我實現了WCF跟蹤與此代碼:捕獲嘗試捕捉異常

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel" switchValue="All" 
     propagateActivity="true"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add name="xml"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
     <source name="CardSpace" switchValue="All"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add name="xml"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
     <source name="System.IO.Log" switchValue="All"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add name="xml"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
     <source name="System.Runtime.Serialization" switchValue="All"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add name="xml"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
     <source name="System.IdentityModel" switchValue="All"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add name="xml"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
     <source name="System.ServiceModel.MessageLogging" switchValue="All"> 
     <listeners> 
      <add type="System.Diagnostics.DefaultTraceListener" name="Default"> 
      <filter type="" /> 
      </add> 
      <add name="ServiceModelMessageLoggingListener"> 
      <filter type="" /> 
      </add> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add initializeData="c:\wcflogs\trace.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
     name="Default" traceOutputOptions="Timestamp"> 
     <filter type="" /> 
     </add> 
    </sharedListeners> 
    <trace autoflush="true" /> 
    </system.diagnostics> 

    <system.serviceModel> 
    <diagnostics wmiProviderEnabled="true"> 
     <messageLogging logEntireMessage="true" logMalformedMessages="true" 
     logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" 
     maxMessagesToLog="500" maxSizeOfMessageToLog="5000" /> 
    </diagnostics> 
    </system.serviceModel> 

,但它僅跟蹤被拋出try/catch塊外產生的異常,所以當我想有這樣的例外在我跟蹤我需要刪除try/catch塊。在我的WCF跟蹤中,是否有任何方法可以從try {}中產生此異常?

+0

的事件,我不這麼認爲,因爲你的代碼是處理異常(通過try/catch塊)。如果要捕獲try/catch塊內的異常,請將它們記錄到'catch'內的文件或數據庫中。 – Tim

+0

是的,我正在捕獲異常並將它們記錄到數據庫中,但也許還有其他方法可以在我的跟蹤文件中使用它 –

回答

0

只需將其他源添加到您的配置文件。您仍然應該能夠使用共享偵聽器。我認爲。

<system.diagnostics> 
    <sources> 
    <source name="HandledExceptions" switchValue="All"> 
    <listeners> 
    <add initializeData="HandledExceptions.svclog" type="System.Diagnostics.XmlWriterTraceListener" name="HandledExceptionListener"> 
     <filter type="" /> 
    </add> 
    </listeners> 
    </source> 
    </sources> 
    <trace autoflush="true" /> 
</system.diagnostics> 

,然後編寫代碼

catch (FaultException fe) 
{ 
    TraceSource trace = new TraceSource("HandledExceptions"); 
    trace.TraceEvent(TraceEventType.Warning, 0, fe.Message + System.Environment.NewLine + fe.StackTrace); 
    trace.Flush(); 
    trace.Close(); 

    throw fe; 
} 
catch (Exception e) 
{ 
    TraceSource trace = new TraceSource("HandledExceptions"); 
    trace.TraceEvent(TraceEventType.Critical, 0, e.Message + System.Environment.NewLine + e.StackTrace); 
    trace.Flush(); 
    trace.Close(); 

    throw new FaultException(e.Message); 
}