Различия в поведении между Системой. Сеть. Конфигурация. WebConfigurationManager и Система. Конфигурация. ConfigurationManager

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

ConfigurationManager.ConnectionStrings["connectionString"]; 

это возвратило пустой указатель, но

using System.Web.Configuration;

/* ... */

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

WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

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

возвращенный корректная строка подключения.

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

Править: То, что я действительно спрашиваю, почему делает ConfigurationManager приблизьтесь к сбою, когда корневой каталог будет неправильно установлен, но успешно выполнится иначе, и WebConfigurationManager успешно выполняется независимо от того, установлен ли корневой каталог правильно? Есть ли какие-либо другие различия, такие как предположения об управлении доступом?

12
задан Jesse 30 July 2013 в 15:54
поделиться

2 ответа

Попробуйте это:

Поместите точку останова, где ваше утверждение ConfigurationManager является и запустить следующее в окне немедленного вывода ((конфигурация) ConfigurationManager.getsection («ConnectionStrings»)). ElementInformation Отказ Отчеты о моей машине Источник: «C: \ Users \ John \ Documents \ Visual Studio 2008 \ Проекты \ 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 [«ConnectionStringString»]; может искать местоположение конфигурации, которое не обязательно так же, как Корень веб-приложения Web.config. Скорее всего, он выглядит в каталоге Windows (например, в другом месте или для Machine.config). Попытка найти подходящий тест для этого, хотя.


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

System.configuration. ConfigurationManager может получить доступ к формату .NET Configuration XML, который означает, что он читает как:

  • веб-конфигурации (например, файл Web.config в ASP.NET)
  • и без веб-конфигураций (например, App.config Файл - автономное приложение для консоли, приложение для Windows и т. Д.)

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

System.Web.Configuration. WebConfigurationManager делает в значительной и том же, но это «Webified» версию Configuration Manager, обеспечивая доступ к веб-специфическим формам конфигурации ASP.NET (E.g. Web.config файл в ASP.NET).

Сходства

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

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

Так что есть много сходств, однако,

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

доступа к конфигурации : ConfigurationManager имеет методы открытия автономных конфигуров приложения (I.E. 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
31
ответ дан 2 December 2019 в 04:43
поделиться

Первый класс обеспечивает доступ к файлам Config Config Config (например, App.config) и вторым для файлов веб-приложения (например, Web.config).

1
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: