встроить конфигурацию приложения в код C # в wcf

У меня есть клиентская программа, которая подключается к моей службе wcf. я хочу встроить конфигурацию приложения в код C #, пока пользователи не смогут изменить или даже увидеть app.config.

но я не могу перенести эти два параметра конфигурации в код C #:

<system.diagnostics>
    <sources>
      <source propagateActivity="true" name="System.ServiceModel" switchValue="Warning">
        <listeners>
          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
            <filter type="" />
          </add>
          <add name="NewListener">
            <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="NewListener">
            <filter type="" />
          </add>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="Trace.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          name="NewListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
        <filter type="" />
      </add>
    </sharedListeners>
  </system.diagnostics>

И

<system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true" >
      <proxy autoDetect="True" usesystemdefault="True"/>
    </defaultProxy>
  </system.net>

я добавил такой код

 System.Diagnostics.XmlWriterTraceListener xmlt = new System.Diagnostics.XmlWriterTraceListener("Trace.svclog", "myListener");
  System.Diagnostics.Trace.Listeners.Add(xmlt):

но не вышло. когда вы устанавливаете Trace Listener в файле app.config, приложение автоматически регистрирует исключение, возникает предупреждение и т. д. (это я хочу), но когда я создаю System.Diagnostics.XmlWriterTraceListener, я должен писать журнал (исключения) сам.

о прокси по умолчанию я нашел несколько классов, но я не могу найти эти настройки в классах.

Вопросы:

1- Я хочу перенести эти настройки в код C # (я хочу, чтобы результат C # был точным, как результат app.config)

2- ли app.config сильнее кода C #? могу ли я найти все настройки app.config в классах c #?


person Mamad R    schedule 06.03.2013    source источник
comment
Здесь есть отличное решение .   -  person Brandon    schedule 10.03.2013


Ответы (4)


Да, вы можете настроить все параметры WCF в коде. При поиске в stackoverflow я нашел ссылку, где задавали этот вопрос wcf-configuration-without-a -config-file Также есть ссылка из Microsoft MSDN MSDN Источник. По поводу отслеживания WCF вот ссылка, которая также вам поможет: Отслеживание WCF в коде

person xmidPOE    schedule 11.03.2013

Я обращусь к модификации WCF Web.Config на лету в вашем вопросе. Обратите внимание, что этот метод также работает для доступа к файлам APPConfig.

Вы можете получить доступ к файлам конфигурации за пределами приложения Form.

System.Configuration.ExeConfigurationFileMap configMap = new ExeConfigurationFileMap("YourWCFAppPath\\web.config");
System.Configuration.Configuration webConfigFile = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

Оттуда вы можете получить разделы конфигурации; Измените его, а затем сохраните обратно в файл конфигурации. Я сейчас не нахожусь на машине с Visual Studio, поэтому я не уверен на 100% относительно синтаксиса для получения раздела элементов; как только он у вас есть, вы можете изменить возвращенный объект и, когда закончите, выполнить сохранение в файле конфигурации. При сохранении файла конфигурации вам нужно будет указать режим как измененный.

webConfigFile.Save(ConfigurationSaveMode.Modified);

Вам нужно будет помнить, что приложение WCF должно вызывать обновление файла конфигурации, который он уже выполнял на момент изменения файла конфигурации. Если бы вы изменили раздел Строки подключения, вы бы выполнили приведенный ниже код.

System.Configuration.ConfigurationManager.RefreshSection("connectionStrings");
person Kaiser12    schedule 09.03.2013
comment
полностью я не хочу иметь app.config, я просто хочу обработать его другим способом ... app.config может редактировать пользователем, я хочу удалить его и ввести настройку в коде. Спасибо за ответ - person Mamad R; 10.03.2013

А как насчет встраивания файла app.config в сборки? Это должна быть опция в свойствах файла app.config.

Или вы можете настроить все это в коде и вообще избавиться от файла app.config:

Прокси-сервер можно настроить следующим образом:

var proxy = HttpWebRequest.DefaultWebProxy;
proxy.Credentials = CredentialCache.DefaultCredentials;  

Однако я считаю, что трассировку WCF нельзя полностью настроить с помощью кода ... вы можете попробовать использовать другой механизм ведения журнала или ETW?

person EdmundYeung99    schedule 10.03.2013

Вы можете использовать System.Configuration.ConfigurationManager + System.Xml.XmlReader / System.Xml.Serialization.XmlSerializer для получения конфигурации из вашего файла. Затем вы можете сохранить его содержимое в базе данных и использовать вручную во всех местах, где оно должно быть. Также, как советовал @xmidPOE, см. Эту статью wcf-configuration-without-a-config-file

person Igor Lozovsky    schedule 13.03.2013