Я использую .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
<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);
}
<?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. Любые идеи?
В результате я создал настраиваемый файл конфигурации, который имитирует, который использует базу класса ConfigurationSettings для чтения файла .config, поэтому я удалил раздел конфигурации Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings все вместе и заменил его на пользовательский класс конфигурации.
Надеюсь, это поможет кому-то.