2014-10-15 3 views
0

Я пытаюсь получить мою страницу .aspx для чтения из файла web.config. Код, который работает на других серверах, не работает должным образом на одном конкретном сервере (все задействованные машины - W2K3 R2 SP2).ASP.NET не пытается открыть файл web.config?

Отрывок из .aspx является

<body> 
    <form id="form1" runat="server"> 
    <div> 
    <asp:Label runat="server" Text="" ID="lblTime" /><br /> 
    Value of myConfigTest is '<asp:Label ID="lblValue" runat="server" Text=""/>' 
    </div> 
    </form> 
</body> 

Код здесь:

using System; 
using System.Web.Configuration; 

namespace configTestWeb 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      lblTime.Text = DateTime.Now.ToLongTimeString(); 
      string value = WebConfigurationManager.AppSettings["myConfigTest"]; 
      lblValue.Text = value; 
     } 
    } 
} 

И мой файл web.config установлен таким образом:

<?xml version="1.0"?> 

<configuration> 

    <appSettings> 
     <add key="myConfigTest" value="This is a test"/> 
    </appSettings> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
</configuration> 

В попытке для устранения неполадок я настраиваю ProcMon для фильтрации на web.config и удаляю страницу из браузера. Выход

1:06:04 PM
Значение myConfigTest является «»

Но действительно странно, что ProcMon никогда не сообщает о попытке доступа к файлу! Если я щелкнул правой кнопкой мыши по виртуальному каталогу в IIS и выберите «Свойства | ASP.NET | Редактирование конфигурации Я могу видеть, как web.config получает доступ к ~ 65 записям в ProcMon, а appSetting сообщается правильно в диалоговом окне настроек конфигурации ASP.NET.

Я считаю, что я исключил ACL как проблему
a) Настройка всего дерева каталогов, в котором находятся .aspx и web.config для всех | Полные разрешения
b) ProcMon сообщит о неудачных попытках открыть файл, если были разрешены проблемы

В отчаянии я удалил/переустановил ASP.NET 4.0.

Возможно отметить, что чтение конфигурации из EXE-файл прекрасно работает на сервере с помощью

string value = System.Configuration.ConfigurationManager.AppSettings[key]; 

Эта проблема появляется через несколько виртуальных каталогов.

Так что мой вопрос в том, что может помешать тому, чтобы этот сервер мог читать файлы web.config?

+0

Не пробовал это - но я думаю, что 'web.config' читается при запуске процесса веб-приложения (' aspnet_wp.exe' в 2k3/IIS6, я думаю), а затем кэшируется приложением, поэтому вы выиграли После этого ProcMon получает доступ к нему. Чтобы проверить: убейте процесс веб-приложения и перезагрузите браузер, чтобы заставить его перезагрузиться. – nothingisnecessary

+0

@nothingisnecessary: ​​хороший вызов, файл .config считывается при запуске приложения. Я вижу, что мой файл читается, но я все еще не получаю ожидаемое значение из файла. – h0meBrewer

ответ

0

Вместо того, чтобы пытаться использовать ProcMon, попробуйте выполнить более простой тест: отредактируйте файл web.config, чтобы включить функцию трассировки, затем зайдите на сайт и посмотрите, показывает ли он трассировку запроса.

Добавьте это в web.config внутри system.web узла:

<trace 
    enabled="true" 
    requestLimit="10" 
    pageOutput="false" 
    traceMode="SortByTime" 
    localOnly="false" 
/> 

По умолчанию изменений в web.config (при сохранении файла/записи на диск) будет перезапустить пул приложений ASP.NET. Однако эти параметры могут быть изменены, поэтому, если вы не видите изменений в поведении вашего веб-приложения после изменения web.config, вы также можете попытаться остановить и перезапустить службу или вызвать перезапуск пула приложений с помощью диспетчера задач, чтобы убить процесс aspnet_wp.exe (Я думаю, что это то, что вызывается в 2k3, если не попробовать w3wp.exe), затем сделать другой запрос (обновить браузер) в веб-приложение, и он должен запустить пул приложений для ya.

Если изменения (переключаясь между следом enabled=true и enabled=false) не видны после сохранения web.config, но видны после того, как форсирование стоп/рестарт, то ваш IIS на этом поле не может иметь возможность перезапустить пул приложений при изменении конфигурации (у меня нет 2k3 передо мной, но в IIS 7 он находится в разделе «Пулы приложений»> «Дополнительные параметры»> «Утилизация»> «Отключить повторное использование для изменений конфигурации» - это один из тех раздражающих вариантов с двумя отрицательными значениями, поэтому «ложь» означает переработать после изменений конфигурации, а «истина» - нет).

Update: Dang, похоже IIS6 не имеет, что «для изменения конфигурации» вариант на вкладке Recycling свойств пула листа App. К сожалению, не знаю, где хранится этот параметр, как представляется, не быть в machine.config или web.config Тхо, так что, вероятно, все, что IIS использует внутренне для метабазы ​​вещи (реестр может быть?)

Если попробовать трюк для переключая след и вы не видите никаких эффектов, вы подтвердили, что редактируете правильный файл web.config?

+0

Я добавил выше, чтобы мой web.config и циклически загрузил w3wp.exe и получил тот же результат без следа. Это согласуется с тем, что я видел ранее в своем исследовании: добавление в system.web НЕ позволило мне просмотреть подробную информацию об ошибке от удаленного клиента. Похоже, что даже фреймворк не читает файл web.config. Я редактирую файл web.config в том же каталоге, что и .aspx, который находится в корне приложения. – h0meBrewer

+0

Я собирался сказать, что еще один тест заключается в том, чтобы добавить некоторые фиктивные атрибуты в один из узлов, потому что asp.net будет генерировать исключение проверки при запуске приложения и чтении файла. Но да, похоже, вы либо не редактируете файл, который, по вашему мнению, есть, либо есть другая проблема, с которой я не знаком. Вы пытались создать новый виртуальный каталог/приложение, которое указывает на одну и ту же папку? – nothingisnecessary

+0

Я не пробовал новый VD, просто не помог. Что касается редактирования неправильного файла, я создал новый каталог, скопированный в файлы .aspx и .config и каталог bin, затем щелкнув правой кнопкой мыши web.config и выбрав Edit. Не могу себе представить, что это неправильно ... Вздох. – h0meBrewer

Смежные вопросы