WCF 跟踪不会写入文件?

标签 wcf trace system.diagnostics

我已在 WCF 服务中启用跟踪。这是系统诊断部分:

<configuration>
  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="System.ServiceModel" switchValue="All" propagateActivity="true">
        <listeners>
          <add name="xmlTraceListener" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging" switchValue="All">
        <listeners>
          <add name="xmlTraceListener" />              
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="xmlTraceListener"
          type="System.Diagnostics.XmlWriterTraceListener"
          initializeData="C:\KryptonTracing\Traces.svclog" />
    </sharedListeners>
  </system.diagnostics>

这是仅显示诊断的 system.serviceModel 部分:

<diagnostics wmiProviderEnabled="true">
  <messageLogging
       logEntireMessage="true"
       logMalformedMessages="true"
       logMessagesAtServiceLevel="true"
       logMessagesAtTransportLevel="true"
       maxMessagesToLog="3000"
   />
</diagnostics>

当我发布服务时,我在服务器上的 Windows 事件查看器中看到一个信息事件,内容如下:

Message Logging has been turned on. Sensitive information may be logged in the clear, even if it was encrypted on the wire: for example, message bodies.

当我转到服务器上的 C:\KryptonTracing 文件夹时,没有生成 Traces.svclog。我已经进入 IIS 并查看了此 WCF 服务正在运行的应用程序池标识,并赋予该标识对该文件夹的完全控制权..仍然没有任何结果。无论我做什么,我都无法获得任何内容来创建 Traces.svclog。仅供引用,此服务是具有自定义身份验证的 wsHttpBinding (SSL),但这应该不重要。

我已经尝试过everything in this post无济于事。请帮忙。

最佳答案

我最终使用 WCF 配置编辑器将跟踪添加到 web.config。它在我的 web.config 中生成了这两个部分。

<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging" switchValue="Warning,ActivityTracing">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="ServiceModelMessageLoggingListener">
            <filter type="" />
          </add>
        </listeners>
      </source>
      <source propagateActivity="true" name="System.ServiceModel" switchValue="Warning,ActivityTracing">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="ServiceModelTraceListener">
            <filter type="" />
          </add>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="C:\Tracing\Krypton_Web_messages.svclog"
           type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
           name="ServiceModelMessageLoggingListener" 
           traceOutputOptions="Timestamp">
        <filter type="" />
      </add>
      <add initializeData="C:\Tracing\Krypton_Web_tracelog.svclog"
           type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
           name="ServiceModelTraceListener" 
           traceOutputOptions="Timestamp">
        <filter type="" />
      </add>
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>

...还有这个:

<diagnostics>
  <messageLogging logEntireMessage="true" logMalformedMessages="true"
    logMessagesAtTransportLevel="true" />
</diagnostics>

然后,在发布之前,我创建了 C:\Tracing 文件夹,并添加了具有完全权限的“Everyone”。最后我发布了,现在两个 .svclog 文件都在文件夹中!!!!不知道为什么我的原始配置一开始就不起作用。

关于WCF 跟踪不会写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23248994/

相关文章:

c# - 从 Jquery 调用 WCF Restfull 服务

c# - WCF 自托管,通过控制台应用程序托管

rust - 使用跟踪箱将日志写入更多目的地

trace - Opentracing 和 W3C 跟踪上下文之间的区别(关于 header )

c# - DebuggerStepThrough 属性 - 如何也跳过子方法

c# - 查询事件日志时如何创建EventBookmark

c# - 从WCF上传和下载大量对象

c# - 围绕库包装 Web 服务

javascript - 在抛出错误的情况下,如何自动有效地记录最后一个函数的参数(在 src 代码中)?

c# - 自定义 TraceListener 和多条消息