Ошибка возникает при зашифрованной строке подключения в web.config

#c# #asp.net #config

#c# #asp.net #конфигурация

Вопрос:

У меня проблема с функцией шифрования моей строки подключения в web.config.

Шифрование работает отлично! Но как только шифрование включено, я теряю содержимое переменной сеанса (исключение Null для переменной сеанса).

Когда я деактивирую шифрование моей строки подключения в web.config, все возвращается в нормальное состояние.

Вот мой код для шифрования строки подключения :

 #region Constructeur

static QueryManager()
{
  Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
  ConnectionStringsSection section = config.GetSection("connectionStrings") as 
                                     ConnectionStringsSection;

  if (section.SectionInformation.IsProtected)
  {
    section.SectionInformation.UnprotectSection();
    config.Save(ConfigurationSaveMode.Minimal);
  }

  if ((myConnectionString = 
       ConfigurationManager.ConnectionStrings["DBConnect"].ConnectionString) == null)
  {
    throw new ConfigurationErrorsException("Database server not configured");
  }

  section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
  config.Save(ConfigurationSaveMode.Minimal);            
}

#endregion
 

Миллион благодарностей за вашу помощь!

Комментарии:

1. Мой код основан на этом веб-сайте: msdn.microsoft.com/en-us/library/89211k9b(v=vs.80).aspx

Ответ №1:

Ошибка возникает из-за ошибки проектирования.

Вот решение :

  • Во-первых, шифрование должно выполняться извне из приложения, чтобы избежать сохранения шифрования / дешифрования при каждом запросе к базе данных.

Затем :

 static QueryManager()
{

  Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
  ConnectionStringsSection section = config.GetSection("connectionStrings") as 
                                     ConnectionStringsSection;

  if (section.SectionInformation.IsProtected)
  {
    section.SectionInformation.UnprotectSection();
  }            

  myConnectionString = section.ConnectionStrings["DBConnect"].ConnectionString;

  if (unikSignConnectionString == null)
  {
    throw new ConfigurationErrorsException("Database server not configured");
  }
}
 

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