2013-03-06 2 views
4

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

, но я не могу заставить эти настройки две конфигурации в 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- приложение .config Сильнее кода C#? могу ли я найти все настройки app.config в классах C#?

+0

Существует блестящее решение для этого [здесь] (http://stackoverflow.com/questions/158783/is-there-a-way-to-override-configurationmanager-appsettings). – Brandon

ответ

2

Да, вы можете настроить все настройки WCF в коде. Поиск в stackoverflow я нашел ссылку были заданы следующие вопросы: wcf-configuration-without-a-config-file Также есть ссылка от Microsoft MSDN MSDN Source. О отслеживании ФОС здесь ссылка, которая также поможет вам: WCF Tracing in code

1

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

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

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

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

webConfigFile.Save(ConfigurationSaveMode.Modified); 

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

System.Configuration.ConfigurationManager.RefreshSection("connectionStrings"); 
+0

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

1

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

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

Прокси-сервер может быть настроен как:

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

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

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^