Можно ли настроить приложение .NET для чтения параметров из базы данных SQL? - PullRequest
0 голосов
/ 17 ноября 2009

Я хочу, чтобы мой app.config (или мой web.config в этом отношении) читал из базы данных SQL вместо файла XML. Как я могу это сделать?

Ответы [ 5 ]

3 голосов
/ 17 ноября 2009

Вы не можете. Система конфигурации .NET основана только на файлах. В любом случае, как ваша программа узнает, как подключиться к базе данных? Конечно, вы можете поместить некоторые настройки в базу данных, но вашей программе все равно понадобится файл конфигурации для получения строки подключения к БД (если вы не жестко ее закодируете, что, конечно, не рекомендуется)

1 голос
/ 31 августа 2011

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

Тогда, насколько я смог выяснить, нет возможности использовать возможности конфигурации .net framework, кроме как через файлы. Но можно загрузить определенный файл методом ConfigurationManager.OpenMappedExeConfiguration.

Это должно открыть дверь, поскольку вы можете сохранить файл конфигурации в поле varbinary (max) на SQL-сервере. Когда ваши приложения подключаются к базе данных sql server, им нужно только извлечь конфигурацию, сохранить ее во временный файл и использовать вышеуказанный метод для ее загрузки.

Я собираюсь проверить это, так как у меня также есть причины запихать это в базу данных. Во-первых, более чем одно приложение будет зависеть от одной и той же конфигурации, и поэтому я хочу иметь только одно. Не только для простоты обслуживания, но также и для обеспечения синхронизации конфигураций приложений, так как трудно предсказать поведение, если они имеют на первый взгляд допустимые, но разные конфигурации (скажем, приложение 1 подключается к БД, а приложение 2 подключается к другой экземпляр БД, т.е. та же схема, но другая база данных).

Вторая причина для меня заключается в том, что система работает за пределами Windows / Unix, и у нас нет средств для аутентификации на основе каталогов в мире Unix. Я не могу хранить учетные данные в виде простого текста. И хотя я мог бы зашифровать конфигурацию, это может привести к появлению червей с операционной стороны: кто может ее расшифровать? Кто может создать новую конфигурацию (зашифрованную) для использования приложением? Кто может решить, кто может делать эти вещи? Чем хуже ты думаешь об этом, тем хуже. :) Если поместить этот материал в базу данных MSSQL, проблемы исчезнут. Мы можем использовать проверку подлинности Windows, чтобы контролировать, кто может читать / изменять базу данных, и шифрование становится вопросом DBA, прозрачным для моих приложений.

Надеемся, что этот метод извлечения в файл и OpenMappedExeConfiguration позволит достичь этих целей.

0 голосов
/ 17 ноября 2009

Я не вижу, как ты можешь. Вы можете легко заменить концепцию настроек app.config полями, хранящимися в пользовательской базе данных - вам просто нужно написать свой собственный класс конфигурации, который считывает значения из БД, а затем делает их доступными в виде статических свойств, словаря или аналога.

Однако web.config отличается - asp.net ожидает прочитать свои значения конфигурации из файла с именем web.config. Если вы действительно, действительно хотите хранить значения, предназначенные для web.config, в базе данных, тогда лучшее, что вы можете сделать, - это написать приложение, которое сгенерирует XML-файл и запишет его. Но я бы действительно спросил , почему на земле вы бы хотели?

0 голосов
/ 17 ноября 2009

Три слова: почему, о, почему?

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

0 голосов
/ 17 ноября 2009

Ваше приложение должно знать, как подключиться к базе данных, поэтому для вашего конфигурационного файла, как минимум, потребуется соответствующая строка подключения. Однако, как только вы это сделаете, вы можете использовать ADO.NET для подключения к базе данных и выбрать любую другую конфигурацию, какую пожелаете.

...