我正在尝试为单个服务(此IIS应用程序中包含的几个服务之一)启用WCF消息跟踪。我已经创建了一个与我的.svc文件放在同一物理目录中的web.config文件。我可以从此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,这意味着它可以被定义为”任何地方“,应该包括物理子目录。我在任何父web.configs中也找不到任何system.diagnostics定义。
有人知道为什么此system.diagnostics配置可能无法处理吗?
发布于 2011-08-16 06:32:56
结束这个问题:真正的问题是为什么要在子文件夹级别指定WCF日志记录?
WCF宿主位于IIS应用程序级别。您不能在根URL上禁用服务的WCF日志记录,然后在较低级别上启用它。如果您想模拟这样的场景,那么您需要两个WCF应用程序,一个在另一个(在IIS中);在.NET中,它们是两个独立的AppDomains。
如果您更喜欢使用一个AppDomain,那么您也许可以通过创建消息筛选器来实现您想要实现的目标。请参阅msdn中的“邮件过滤器”。
发布于 2011-08-10 22:23:13
试试这个:-
<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>发布于 2011-08-10 23:02:38
C:\logs\是否存在?如果没有,则根本不会创建日志文件。
https://stackoverflow.com/questions/7012289
复制相似问题