【问题标题】:How to enable WCF tracing programmatically?如何以编程方式启用 WCF 跟踪?
【发布时间】:2014-10-08 14:37:15
【问题描述】:

我有一个作为 Windows 服务托管的 WCF 服务(项目输出类型 - Windows 应用程序)。所有客户端和服务器逻辑都在 c# 代码中,我没有任何配置文件。我需要在不使用配置文件的情况下启用 wcf 跟踪。 我该怎么做?

【问题讨论】:

    标签: c# wcf trace


    【解决方案1】:

    您可以通过编程方式配置您要放入.config 文件的内容。当您初始化您的服务时,只需添加此代码(根据您的日志记录要求对其进行自定义):

    var listener = new XmlWriterTraceListener("Log.xml");
    Debug.Listeners.Add(listener);
    

    请注意,您可以设置所需的所有属性(例如日志级别),就像在 .config 文件中设置属性一样:

    Debug.AutoFlush = true;
    listener.TraceOutputOptions = TraceOptions.Callstack;
    

    您还可以添加自定义过滤器:

    listener.Filter = new MyCustomTraceFilter();
    

    【讨论】:

    • 应该,但它需要以 TraceSource 而不是 Debug 为目标。
    • @MatthewMartin Debug 将转发(实时)到 TraceInternal 但是是的,如果 OP 有一个自定义 TraceSource 这就是他必须使用的。
    • Service.Model DLL 在运行时写入 TraceSource("System.ServiceModel"),要捕获它,您必须将同名的 TraceSource 添加到上下文并添加侦听器到那个。 Debug、Trace 静态方法用于用户自己的临时跟踪,他似乎没有这样做。如果 WCF 正在写入 Debug,那么我们应该一直在 Visual Studio 窗口中看到 WCF 跟踪的海洋。
    【解决方案2】:

    按照设计,你不能这样做:

    http://social.msdn.microsoft.com/Forums/vstudio/en-US/25b17fef-5660-499d-ad1b-aaa3b8ab7f60/how-do-you-enable-wcf-tracing-without-using-a-config-file-programmatically?forum=wcf

    如果没有任何配置文件,您将无法执行此操作。但是您可以让一个系统为第二个系统编写配置文件。然后,第一个系统将在单独的应用程序池中启动第二个系统。日志记录将在第二个系统中打开。

    【讨论】:

      猜你喜欢
      • 2011-12-09
      • 2017-05-29
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多