Подтвердить что ты не робот

Различия в поведении между System.Web.Configuration.WebConfigurationManager и System.Configuration.ConfigurationManager

У меня были некоторые проблемы на тестовом сервере с веб-сайтом ASP.NET. Я ушел, и у меня был дом каталог веб-сайта по умолчанию указал на неправильное место. Когда я попытался:

ConfigurationManager.ConnectionStrings["connectionString"]; 

он возвращает null, но

using System.Web.Configuration;

/* ... */

var rootWebConfig =
    WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

rootWebConfig.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString;` 

вернула правильную строку подключения.

В чем все различия между двумя подходами?

EDIT: что я действительно спрашиваю, почему подход ConfigurationManager выходит из строя, когда домашний каталог установлен неправильно, но в противном случае он преуспевает, а WebConfigurationManager выполняется независимо от того, правильно ли установлен домашний каталог? Существуют ли какие-либо другие отличия, например, допущения о контроле доступа?

4b9b3361

Ответ 1

Попробуйте следующее:

Поместите контрольную точку, где находится оператор ConfigurationManager, и запустите в окне немедленного вывода следующее:   ((ConfigurationSection) ConfigurationManager.GetSection("connectionStrings")).ElementInformation , Моя машина сообщает Источник: "C:\Users\John\Documents\Visual Studio 2008\Projects\StackOverflowCode\WebApplication1\web.config", как показано ниже.

Примечание. Следующее также показывает, что мой доступ к ASP.NET web.config.

{System.Configuration.ElementInformation}
    Errors: {System.Configuration.ConfigurationException[0]}
    IsCollection: true
    IsLocked: false
    IsPresent: true
    LineNumber: 17
    Properties: {System.Configuration.PropertyInformationCollection}
    Source: "C:\\Users\\John\\Documents\\Visual Studio 2008\\Projects\\StackOverflowCode\\WebApplication1\\web.config"
    Type: {Name = "ConnectionStringsSection" FullName = "System.Configuration.ConnectionStringsSection"}
    Validator: {System.Configuration.DefaultValidator}

И когда я запускаю ConfigurationManager.ConnectionStrings.ElementInformation, я получаю Источник: null, который является правильным для моего веб-приложения.

Что вы получаете для конфигурации Исходный путь???


Немедленное предположение

ConfigurationManager.ConnectionStrings["connectionString"]; может искать местоположение конфигурации, которое не обязательно совпадает с корнем web.config веб-приложения. Вероятно, он ищет в каталоге Windows (например, в другом месте или для machine.config). Попытка найти подходящий тест для этого, хотя.


Намерения каждого менеджера

System.Configuration. ConfigurationManager может получить доступ к XML-формату конфигурации .NET, что означает, что он читает оба:

  • веб-конфигурации (т.е. файл web.config в ASP.NET)
  • и не-веб-конфигурации (например, файл app.config - автономное консольное приложение, приложение Windows и т.д.).

и выражает те аспекты, которые являются общими для типов конфигурации. Это менеджер конфигурации общего назначения. (Однако, несмотря на эту возможность взглянуть на оба типа конфигураций, вы должны использовать его для конфигураций приложений, потому что веб-менеджер посвящен веб-конфигурациям, как описано далее...)

System.Web.Configuration. WebConfigurationManager делает практически то же самое, но является "веб-версией" версии менеджер конфигурации, обеспечивающий доступ к веб-специфическим аспектам конфигурации ASP.NET(например, файл web.config в ASP.NET).

Сходства

См. сходства элементов между ConfigurationManager. * и WebConfigurationManager. *

Оба менеджера могут, например, получить доступ к свойству AppSettings и свойству ConnectionStrings. Действительно, обе эти настройки являются общими для обоих типов конфигураций и даже расположены на одном уровне в документе XML.

Таким образом, существует много сходств,

Поведенческие различия

Доступ к конфигурации: ConfigurationManager имеет методы для открытия автономных конфигураций приложений (например, Myprogram.EXE App.config) относительно приложения EXEC, тогда как WebConfigurationManager имеет методы для открытия веб-конфигурации ASP.NET по отношению к корневому каталогу веб-приложения на веб-сайте.

Вот базовый app.config (например, открытый через "C:\winapp\app.config" из папки диска с помощью ConfigurationManager)

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

И вот базовый web.config (например, открытый через "~", означающий корень веб-сайта WebConfigurationManager)

<?xml version="1.0"?>
<configuration>  
    <appSettings/>
    <connectionStrings/>

    <system.web>
        <!-- special web settings -->
    </system.web>

</configuration>

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

Эти менеджеры расположены в разных сборках.

  • ConfigurationManager: System.Configuration.dll
  • WebConfigurationManager: System.Web.dll

Ответ 2

Первый класс предоставляет доступ к общим конфигурационным файлам клиента (например, app.config), а второй - к файлам веб-приложений (например, web.config).