Передайте файл настроек соединения в DatabaseProviderFactory, Ent Library

2

Я использую .NET 3.5/С#, и проблема, с которой я сталкиваюсь, заключается в том, что мне нужно иметь возможность шифровать и расшифровывать файл .config, который содержит все мои подключения к базе данных, которые будут использоваться с EnterpriseLibrary.Data.DatabaseProviderFactory, показанным в конце вопроса. Это шифрование и дешифрование являются обычными и выполняются с помощью известного ключа и должны быть одинаковыми для каждой машины, поэтому причина, почему я не использую ProtectSection.

Я пытаюсь прочитать зашифрованный файл configurationSetings.config, дешифровать файл в памяти и передать расшифровку содержимое этого файла в DatabaseProviderFactory, чтобы он мог получить доступ к настройкам подключения к базе данных.

Я в настоящее время (не шифрованный файл конфигурации), используя MS Enterprise Libraries (v2) DatabaseProviderFactory в соединении с классом FileConfigurationSource, чтобы посмотреть файл App.config на имя файла ConnectionSettings.config, в котором я храню настройки подключения к базе данных.

Затем я использую передать путь файла ConnectionSettings в FileConfigurationSource, а затем передаю результат в DatabaseProviderFactory который позволяет мне создать экземпляр базы данных.

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

Возможно, существует способ создания настраиваемого ConfigurationSource или что-то, что позволит мне передать расшифровку непосредственно в DatabaseProviderFactory, чтобы создать экземпляр базы данных.

Поэтому по существу мне нужно прочитать зашифрованный файл configurationSetings.config, дешифровать файл в памяти и передать расшифрованный содержимое этого файла в DatabaseProviderFactory, чтобы он мог получить доступ к настройкам подключения к базе данных или что-то подобное, чтобы я мог сопоставлять Microsoft.Practices.EnterpriseLibrary.Data.Database.

Весьма оценен любой код и/или совет.

Спасибо в Advance.

Dave

App.config

  <enterpriseLibrary.ConfigurationSource selectedSource="fileSource">
    <sources>
      <add
        name="fileSource"
        type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b2b86dc1561d89b"
        filePath ="ConnectionSettings.config" />
      <add
        name="systemSource"
        type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b8b89dc1061d43b" />
    </sources>
  </enterpriseLibrary.ConfigurationSource>

КОД МЕТОДА:

Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource fileConfig =
   new Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource(connectionSettingsConfigFile);

Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory dbProvider =
   new Microsoft.Practices.EnterpriseLibrary.Data.DatabaseProviderFactory(fileConfig);

if (string.IsNullOrEmpty(databaseConnectionName))
{
   database = dbProvider.CreateDefault();
}
else
{
   database = dbProvider.Create(databaseConnectionName);
}

CONNECTIONSETTINGS.CONFIG

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5b2b86dc1561d89b" />
  </configSections>

  <dataConfiguration defaultDatabase="defaultConnection" />
  <connectionStrings>
    <add name="defaultConnection" connectionString="Data Source=192.11.111.11;Initial Catalog=TestDB;User Id:Test;Password:test"
        providerName="System.Data.SqlClient" />

  </connectionStrings>
</configuration>

Кажется, что вместо использования DatabaseProviderFactory, если он изменился для использования конкретной реализации, такой как SqlDatabase, он позволяет передавать в connectionString часть своего конструктора, что позволяет немного более гибко. Поэтому, поскольку теперь я использую SqlDatabase, мне нужно выяснить, как передать содержимое расшифрованного файла конфигурации в виде строки в объект Configuration. Любые идеи?

  • 0
    любое решение ??
Теги:
enterprise-library

1 ответ

2
Лучший ответ

В результате я создал настраиваемый файл конфигурации, который имитирует, который использует базу класса ConfigurationSettings для чтения файла .config, поэтому я удалил раздел конфигурации Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings все вместе и заменил его на пользовательский класс конфигурации.

Надеюсь, это поможет кому-то.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню