Как можно программно переопределить значения ap.config для приложения C # wcf - PullRequest
1 голос
/ 04 февраля 2011

Разработка веб-сервисов WCF с использованием C #, VS2010 и .NET 4.0

Я бы хотел программно изменить некоторые настройки, хранящиеся в моем файле app.config.

Я не хочу редактировать или обновлять фактический файл app.config, я хочу переопределить некоторые атрибуты после запуска приложения.

То, что я хотел бы изменить, - это уровень трассировки в моем клиентском приложении WCF. Если в файле app.config уровень трассировки обычно отсутствует, то для поддержки клиента я бы хотел разрешить клиенту изменить это значение на предупреждение, критическое, подробное или любое другое.

Я не хочу изменять файл app.confg, ни один уровень трассировки не подходит для нормальной работы. Только когда клиент отправляет задачу поддержки и получает представление о том, что происходит, нужно заставить приложение генерировать трассировку с уровнем, установленным на некоторый уровень.

Как можно программно изменить подобные вещи после запуска приложения.

Я видел несколько статей о том, как программно настроить конечную точку с нуля. Однако я не видел этого для раздела systems.diagnostics. Я видел статьи о том, как изменить файл app.config, используя редактор wcf или вручную.

Что я не видел, так это то, как можно сохранить то, что определяет app.config, но затем, как, когда нужно, программно изменить или переопределить настройки, содержащиеся в файле ap.config.

В следующем файле app.config у меня есть

<system.diagnostics>
    <sources>
        <source name="NewSource" switchValue="Error,ActivityTracing">
            <listeners>
                <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                    <filter type="" />
                </add>
            </listeners>
        </source>
        <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
            <listeners>
                <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                    <filter type="" />
                </add>
                <add name="ServiceModelMessageLoggingListener">
                    <filter type="" />
                </add>
            </listeners>
        </source>
        <source name="System.ServiceModel" switchValue="Warning, 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="d:\sandbox\wcf\helloworld\helloworldservice\helloclient\app_messages.svclog"
            type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
            name="ServiceModelMessageLoggingListener" traceOutputOptions="DateTime, Timestamp, ProcessId, ThreadId">
            <filter type="" />
        </add>
        <add initializeData="d:\sandbox\wcf\helloworld\helloworldservice\helloclient\app_tracelog.svclog"
            type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
            name="ServiceModelTraceListener" traceOutputOptions="DateTime, Timestamp, ProcessId, ThreadId">
            <filter type="" />
        </add>
    </sharedListeners>
</system.diagnostics>

Я бы хотел, чтобы пользователь дополнительно настраивал атрибут switchvalue на что-то отличное от предупреждения по умолчанию. Я мог бы хотеть отключить это, изменяя это ни к чему или увеличивать содержание, изменяя это на подробный и т. Д. Я также мог бы захотеть изменить место записи трассировки в значениях атрибута initializeData .

Возможно ли это? Должно быть много раз, когда нужно программно переопределить атрибуты различных элементов, когда значения по умолчанию в app.config обычно в порядке, но в некоторых случаях нужно переопределить эти значения программно, не сохраняя изменений в app.config.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 04 февраля 2011

Последнее предложение вашего поста отвечает на вопрос: «Должно быть много раз, когда нужно переопределить атрибуты различных элементов программно , когда значения по умолчанию в app.config обычно в порядке, но в некоторых случаях нужно переопределить эти значения программно, не сохраняя изменений app.config «.

Вы нуждаетесь в императивном программировании :) Другими словами, напишите служебный класс, чтобы помочь вам выполнить проверки.

Попробуйте этот класс: SourceSwitch

...