Почему ConfigurationManager.GetSection "system.webServer / handlers" недоступен? - PullRequest
8 голосов
/ 03 января 2012

Я пытаюсь прочитать некоторые настройки в моем методе global.aspx Application_Start.Когда я читаю ConfigurationManager.GetSection("system.web/httpHandlers"), все в порядке:

ConfigurationManager.GetSection ("system.web / httpHandlers") {System.Web.Configuration.HttpHandlersSection} base {System.Configuration.ConfigurationSection}: {System.Web.Configuration.HttpHandlersSection} Обработчики: Count = 48

Но когда я читаю ConfigurationManager.GetSection("system.webServer/handlers") (который содержит мои пользовательские обработчики, он возвращает null. Что я делаю неправильно?

Раздел выглядит следующим образом:

<system.webServer>
    <handlers>
        <add verb="*" path="*.loc" name="LocalizedResourceStreamer" 
                 type="CFW.WebUI.HttpHandlers.LocalizedResourceStreamer,WebUI" />
    </handlers>
</system.webServer>

Примечания:

  • Web.configs являются вложенными, ConfigurationManager.GetSection по умолчанию учитывает вложение.
  • Общая проблема заключается в попытке выяснить, обслуживаются ли * .loc файлы.

Пока: enter image description here Похоже, system.webServer игнорируется.

Ответы [ 2 ]

3 голосов
/ 03 января 2012

В зависимости от вашей ОС / настройки, элемент system.webServer может быть настроен так, что он игнорируется, и поэтому система конфигурации не будет создавать из него какие-либо внутренние элементы конфигурации.Например, на моем компьютере (WinXP, IIS 5.1) по умолчанию он игнорируется.

Проверьте machine.config на компьютере, на котором выполняется этот код, и посмотрите, как настроен элемент system.webServer.На данный момент у меня нет машин с подходящими более поздними ОС, но может случиться так, что этот элемент всегда будет игнорироваться - в конце концов, эта часть конфигурации предназначена для использования IIS, а не нашей.

2 голосов
/ 03 января 2012

попробуй:

** p.s. мой web.config содержит: <httpHandlers>, а не handlers как ваш. изменить как обязательно :) - также веб-сервер против system.web **

enter image description here

   Configuration webConfig = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

        ConfigurationSection webConfigSections = webConfig.GetSection("system.web/httpHandlers");
        if (webConfigSections != null)
        {
         //   PropertyInformationCollection t = webConfigSections.ElementInformation.Properties;

            XDocument xmlFile = XDocument.Load(new StringReader(webConfigSections.SectionInformation.GetRawXml()));
            IEnumerable<XElement> query = from c in xmlFile.Descendants("add") select c;

            foreach (XElement band in query)
            {
            }


        }

p.s. вот в чем проблема с этим разделом - у него нет уникального имени элемента, которое можно взять. вот почему вы берете его целиком (элемент "add") и анализируете его.

...