Переопределение system.diagnostics в подкаталоге web.config - PullRequest
1 голос
/ 10 августа 2011

Я пытаюсь включить трассировку сообщений WCF для одной службы (одна из нескольких включена в это приложение IIS).Я создал файл web.config, который находится в том же физическом каталоге, что и мой файл .svc.Я могу настроить службу из этого файла web.config, изменить поведение, конечные точки и т. Д. Однако, когда я пытаюсь включить узел include 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 для элемента section , означает, что он может быть определен как «Везде», который должен включать физические подкаталоги.Я не смог найти ни одного определения system.diagnostics ни в одном из родительских web.configs.

Кто-нибудь знает, почему эта конфигурация system.diagnostics может не обрабатываться?

Ответы [ 3 ]

3 голосов
/ 16 августа 2011

Чтобы закрыть этот вопрос: реальный вопрос заключается в том, почему вы хотите указать ведение журнала WCF на уровне подпапок?

Хостинг WCF находится на уровне приложений IIS. Невозможно отключить ведение журнала WCF для служб по корневому URL, а затем включить их на более низких уровнях. Если вы хотите эмулировать такой сценарий, то вам нужно 2 приложения WCF, одно внутри другого (в IIS); в .NET это два отдельных домена приложений.

Если вы предпочитаете придерживаться одного домена приложений, возможно, вы сможете достичь того, чего пытаетесь достичь, создав фильтры сообщений. См. «Фильтры сообщений» в msdn .

0 голосов
/ 10 августа 2011

C: \ logs \ существует?Если этого не произойдет, файл журнала не будет создан вообще.

0 голосов
/ 10 августа 2011

Попробуйте это: -

    <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>
...