WCF跟踪不会写入文件?

时间:2014-04-23 15:32:55

标签: wcf tracing system.diagnostics

我在WCF服务中启用了跟踪。这是system.diagnostics部分:

<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事件查看器中看到一个信息事件,说明如下:

  

消息记录已打开。敏感信息可能是   登录清除,即使它是在线上加密:for   例如,消息体。

当我转到服务器上的C:\ KryptonTracing文件夹时,没有生成Traces.svclog。我已经进入IIS并查看此WCF服务正在运行的应用程序池标识,并且该标识完全控制该文件夹..仍然没有。无论我做什么,我都无法创建Traces.svclog。仅供参考,此服务是带有自定义身份验证的wsHttpBinding(SSL),但这无关紧要。

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

2 个答案:

答案 0 :(得分:3)

我最终使用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文件夹并添加了#34; Everyone&#34;拥有完全权限。最后我发布了,现在两个.svclog文件都在文件夹中!不知道为什么我的原始配置开始时没有工作。

答案 1 :(得分:0)

遇到同样的问题我注意到app.config gui编辑用西班牙语写的switchValue="Advertencia,ActivityTracing"(我使用的VS语言环境)。

我将其更改为switchValue="Warning,ActivityTracing"并且有效。现在创建了日志文件 在线搜索“TraceLevel Enumeration”以查看可用选项。