0
  1. 有没有办法防止在 WCF 跟踪中记录某种类型的异常?
  2. 更好的是,有没有办法防止记录一个特定的异常(我的意思是在特定的代码行抛出一个异常)?

说明:

我正在开发两个 Windows 服务 (A) 和 (B)。在服务 (A) 上,我在app.config文件中启用了 WCF 跟踪,如下所示:

<system.diagnostics>
    <sources>
        <source name="System.ServiceModel" switchValue="Warning" 
                propagateActivity="true">
            <listeners>
                <add name="traceListener" 
                     type="System.Diagnostics.XmlWriterTraceListener"
                     initializeData="C:\WCF-log.txt" />
            </listeners>
        </source>
    </sources>
</system.diagnostics>

在此服务 (A) 上,我有一些代码用于检测其他服务 (B) 是否已关闭,如下所示:

try {
    serviceB.Ping(); // Exception is thrown here when serviceB is down, and 
                     // logged in the C:\WCF-log.txt file
} catch {
    // Manage failed ping (log...)
}

现在,服务(B)有时可能会宕机,这很正常。我希望那些引发的异常不要记录在 WCF 跟踪中,因为它们已经由我的应用程序处理,并且我希望只有在存在“真实”时才需要查看C:\WCF-log.txt文件问题。

4

1 回答 1

1

您应该在跟踪侦听器配置中添加过滤器类型,如下所示

<system.diagnostics>
        <sources>
            <source name="System.ServiceModel" switchValue="Warning"
                    propagateActivity="true">
                <listeners >
                    <add name="traceListener"
                         type="System.Diagnostics.XmlWriterTraceListener"
                         initializeData="C:\WCF-log.txt" >
                        <filter type="FilterExceptions"/>
                    </add>                  
                </listeners>
            </source>
        </sources>
    </system.diagnostics>

并且 FilterException 类型应该继承 System.Diagnostics.TraceListener 并覆盖 ShouldFilter 方法,如下所示

 public class FilterExceptions : TraceFilter
    {
        public override bool ShouldTrace(TraceEventCache cache, string source, TraceEventType eventType, int id, string formatOrMessage, object[] args, object data1, object[] data)
        {
            // Add exception filter in below if when event type is error
            if (eventType == TraceEventType.Error)
            {
                return false;
            }

            return true;
        }
    }
于 2013-01-31T07:35:12.927 回答