Вот ситуация: я хочу иметь возможность запускать мою (.net 3.5) службу WCF в двух режимах:
- как обычный файл .exe и
- в качестве службы Windows.
не большая проблема.
Я создаю 2 проекта: одно консольное приложение и одну службу Windows.
Теперь я не хочу дублировать конфигурацию WCF дважды (для каждого проекта), поэтому я поместил ее в отдельные XML-файлы (которые могут совместно использоваться обоими приложениями).
Теперь каждый из файлов app.config выглядит следующим образом:
<system.serviceModel>
<bindings configSource="Config\ServiceModel.Bindings.xml" />
<services configSource="Config\ServiceModel.Services.xml" />
<behaviors configSource="Config\ServiceModel.Behaviors.xml" />
</system.serviceModel>
Пока все хорошо - сервис отлично работает как консоль, так и сервис.
Проблема начинается, когда я пытаюсь манипулировать значениями в разделе services
:
string exePath = string.Format("{0}MyService.exe", targetDir);
var config = ConfigurationManager.OpenExeConfiguration(exePath);
var serviceModelSectionGroup = config.GetSectionGroup("system.serviceModel");
var servicesSection = (ServicesSection) serviceModelSectionGroup.Sections["services"];
var services = servicesSection.Services;
Но services
- это пустая коллекция!
Полагаю, мне здесь чего-то не хватает, но что? Должен ли я также вызывать OpenExeConfiguration
для каждого из моих XML-файлов?