所以我现在在控制台应用程序上运行自托管我的WCF服务,但我也在IIS上运行它们。 问题是我正在学习理解Service Trace Viewer Tool,当然,现在我想进一步编写自己的消息以包含在跟踪文件中。
我认为应该很容易,但Trace.TraceInformation不会对跟踪文件写任何内容。
我错过了什么?
这就是我的配置:
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
</listeners>
</source>
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"
propagateActivity="true">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="ServiceModelTraceListener">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="C:\_sebastian\dev\gomez\WCFTraceTest\Server\App_tracelog.svclog"
type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
<filter type="" />
</add>
</sharedListeners>
</system.diagnostics>
<system.serviceModel>
<diagnostics>
<messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"/>
</diagnostics>
答案 0 :(得分:0)
正如您所看到的here,您需要在Trace上调用Flush以将其刷新到侦听器(或打开AutoFlush)。你在做吗?
答案 1 :(得分:0)
将您自己的源添加到配置文件中:
<source name="MyNameSpace.MySource" switchValue="Verbose,ActivityTracing"
propagateActivity="true">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="ServiceModelTraceListener">
<filter type="" />
</add>
</listeners>
</source>
这不是绝对必要的,但是如果您使用SvcTraceViewer,那么能够将WCF跟踪与您自己的跟踪分开将会很有帮助。 接下来,在您要创建跟踪的任何类中创建TraceSource的实例:
class SomeClass{
TraceSource _traceSource = new TraceSource("MyNamespace.MySource");
void SomeMethod(){
// Anywhere you want to trace you can call the TraceInformation(String) method:
_traceSource.TraceInformation("My trace message");
}
}
每次跟踪时都可以调用Flush,但我不推荐它。这些类经过优化,可以尽可能少地破坏代码流,这意味着跟踪可能不会立即显示在文件中,因为实际写入文件发生在另一个线程上。但是,您可以在应用程序关闭期间调用Flush。