чтение раздела system.servicemodel из базы данных - PullRequest
2 голосов
/ 07 марта 2011

У нас есть динамически составленное приложение, в которое пользователь может добавлять сервисы и операции. Это приложение установлено на кластере серверов.

Поскольку добавление сервисов в приложение включает в себя так много записи в web.config, мне было интересно, можно ли прочитать секцию system.servicemodel из базы данных вместо web.config.

Похоже, что реализация конфигурации в Microsoft тесно связана с тем, где она хранится.

1 Ответ

0 голосов
/ 08 марта 2011

Нет никакого готового способа сделать это. Однако это возможно.

Несколько футов ниже, Configuration класс использует FileStream экземпляр, где он может использовать любой Stream. Этот конкретный шаг можно заменить пользовательской реализацией интерфейса IInternalConfigHost (множество свойств и методов для его реализации).

Особенно интересны OpenStreamForRead и OpenStreamForWrite, оба возвращают Stream экземпляров. Там вы можете поместить логику для извлечения XML разделов конфигурации из базы данных в ConfigurationSection экземпляров и для помещения ConfigurationSection экземпляров в виде XML в базу данных.

Следующим шагом является создание экземпляра класса Configuration. Однако здесь мы должны испачкаться, потому что его конструктор никогда не покидает королевство System.Configuration. Необходимость использовать отражение, чтобы достичь и использовать его. Я предлагаю реализацию IInternalConfigConfigurationFactory, чтобы обернуть магию отражения.

Configuration Create( Type typeConfigHost,
    params object[] hostInitConfigurationParams );

В качестве первого параметра передайте тип реализованной конфигурации хоста.

После того, как у нас есть Configuration экземпляр, мы можем использовать его для пользовательских ServiceHost, ChannelFactory<T> и DuplexChannelFactory<T>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...