【问题标题】:Why can't I trace just errors on the service side of my WCF?为什么我不能只跟踪 WCF 服务端的错误?
【发布时间】:2010-09-02 10:35:56
【问题描述】:

我有一个 wcf 服务,它有时会产生错误,例如“InnerException 消息是‘对象图中可以序列化或反序列化的最大项目数为 '65536'”。我知道如何解决这个特定问题,但现在我想创建一个仅将错误(和严重错误)保存到日志的跟踪。

问题是我的日志要么保存所有内容(包括成功调用),要么什么都不保存。所以我的问题是,我的 web.config 有什么问题?

<system.diagnostics>
    <trace autoflush="true" />
    <sources>
        <source name="System.ServiceModel" propagateActivity="true" switchValue="Error">
            <listeners>
                <add name="xml">
                </add>
            </listeners>
        </source>
    </sources>
    <sharedListeners>
        <add initializeData="C:\mylog.svclog"
             type="System.Diagnostics.XmlWriterTraceListener"
             name="xml" />
    </sharedListeners>
</system.diagnostics>

我尝试了所有不同的 switchValue 组合,但没有一个能给出我想要的结果(= 捕获错误,但没有成功调用)。

有人有想法吗?

【问题讨论】:

    标签: wcf logging trace


    【解决方案1】:

    如果您需要仅在服务端进行日志记录,您可能需要查看IErrorHandler 接口,您可以将其放到您的服务类中。

    这个接口会暴露两个方法

    public bool HandleError(Exception error)
    
    public void ProvideFault(Exception error, MessageVersion ver, ref Message msg)
    

    这将允许您利用服务端发生的所有异常 - 将它们记录到您自己的日志文件中,您应该没问题。

    【讨论】:

    • 啊,是的,你可能是对的,也许使用正常的错误跟踪并将这些错误与来自网站的错误(我存储在数据库中)合并起来更容易。
    • 我试过了,效果很好。 (而且我还了解到 globala.asax Application_Error 不能用于此目的)
    猜你喜欢
    • 2012-06-16
    • 2011-04-04
    • 2012-12-12
    • 1970-01-01
    • 2013-06-04
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多