我正在尝试为单个服务启用WCF邮件跟踪(此IIS应用程序中包含的一个服务之一)。我创建了一个web.config文件,该文件与我的.svc文件放在同一个物理目录中。我能够从此web.config文件配置服务,修改行为,端点等。但是,当我尝试包含一个system.diagnostics节点时,它似乎没有任何效果。这不会产生跟踪文件:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service name="My.Awesome.Wcf.Service" />
<!-- my endpoints and behaviors are defined programmatically -->
</services>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"
maxMessagesToLog="3000" />
</diagnostics>
</system.serviceModel>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true" >
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\logs\Traces.svclog" />
</sharedListeners>
<trace autoflush="true" />
</system.diagnostics>
</configuration>
如果我将整个system.diagnostics节点从此子目录web.config移出到应用程序的根web.config,那么它会神奇地开始工作。据我所知,system.diagnostics部分不仅限于应用程序的根web.config,因为我的machine.config显示了这个部分的定义:
<section name="system.diagnostics" type="System.Diagnostics.SystemDiagnosticsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
请注意,此定义不包含“allowDefinition”属性,根据此MSDN documentation for the section element,它可以定义为“Everywhere”,其中应包含物理子目录。我无法在任何父web.configs中找到任何system.diagnostics定义。
有谁知道为什么这个system.diagnostics配置可能无法处理?
答案 0 :(得分:3)
要结束这个问题:真正的问题是为什么要在子文件夹级别指定WCF日志记录?
WCF托管位于IIS应用程序级别。您无法在根URL处为服务禁用WCF日志记录,然后在较低级别启用。如果你想模仿这样的场景,那么你需要2个WCF应用程序,一个在另一个中(在IIS中);在.NET中,它们是2个独立的AppDomains。
如果您更喜欢坚持使用一个AppDomain,那么您可以通过创建消息过滤器来实现您想要实现的目标。请参阅msdn中的“消息过滤器”。
答案 1 :(得分:0)
试试这个: -
<sources>
<source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
<listeners>
<add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\temp\Traces.svclog" />
</listeners>
</source>
</sources>
答案 2 :(得分:0)
C:\ logs \是否存在?如果没有,则根本不会创建日志文件。