首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写子目录web.config中的system.diagnostics

重写子目录web.config中的system.diagnostics
EN

Stack Overflow用户
提问于 2011-08-10 22:18:41
回答 3查看 1.6K关注 0票数 1

我正在尝试为单个服务(此IIS应用程序中包含的几个服务之一)启用WCF消息跟踪。我已经创建了一个与我的.svc文件放在同一物理目录中的web.config文件。我可以从此web.config文件配置服务、修改行为、端点等。但是,当我尝试包含一个system.diagnostics节点时,似乎没有任何效果。这不会生成跟踪文件:

代码语言:javascript
复制
<?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显示了这个部分的定义:

代码语言:javascript
复制
<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配置可能无法处理吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-16 06:32:56

结束这个问题:真正的问题是为什么要在子文件夹级别指定WCF日志记录?

WCF宿主位于IIS应用程序级别。您不能在根URL上禁用服务的WCF日志记录,然后在较低级别上启用它。如果您想模拟这样的场景,那么您需要两个WCF应用程序,一个在另一个(在IIS中);在.NET中,它们是两个独立的AppDomains。

如果您更喜欢使用一个AppDomain,那么您也许可以通过创建消息筛选器来实现您想要实现的目标。请参阅msdn中的“邮件过滤器”。

票数 3
EN

Stack Overflow用户

发布于 2011-08-10 22:23:13

试试这个:-

代码语言:javascript
复制
    <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>
票数 0
EN

Stack Overflow用户

发布于 2011-08-10 23:02:38

C:\logs\是否存在?如果没有,则根本不会创建日志文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7012289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档