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

Веб-сервер разработки VS2010 не использует обработчики/модули HTTP с интегрированным режимом

Я разрабатываю веб-сайт ASP.NET MVC 2, предназначенный для .NET Framework 4.0, с использованием Visual Studio 2010.

My web.config содержит следующий код:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <add name="XhtmlModule" type="DomenicDenicola.Website.XhtmlModule" />
    </modules>
    <handlers>
        <add name="DotLess" type="dotless.Core.LessCssHttpHandler,dotless.Core" path="*.less" verb="*" />
    </handlers>
</system.webServer>

Когда я использую Build > Publish для размещения веб-сайта на моем локальном экземпляре IIS7, он отлично работает.

Однако, когда я использую Debug > Start Debugging, ни HTTP-обработчик, ни модуль не выполняются ни при каких запросах.

Как ни странно, когда я помещаю теги обработчика и модуля <add /> обратно в <system.web /> под <httpHandlers /> и <httpModules />, они работают. Это означает, что веб-сервер разработки работает в классическом режиме.

Как это исправить?

4b9b3361

Ответ 1

Нет. WebDev.WebServer.exe не поддерживает и не поддерживает интегрированный конвейер.

Итак, если у вас есть код, который нельзя записать для работы в обеих средах, вам нужно будет использовать локальный IIS для разработки.

В принципе, system.web - это место для настройки обработчиков и модулей webdev-сервера и IIS5-6. system.webServer для обработчиков и модулей IIS7, как вы знаете.

Ссылка

Каждый запрос в WebDev.WebHost40 (и предыдущих версиях) обрабатывается HttpRuntime.ProcessRequest  (который не поддерживает режим интегрированного конвейера). Это метод, используемый во всех трех версиях WebHost.WebServer.dll (ядро WebDev.WebServer.exe)

И слово некоторый чувак, который хорошо знаком с внутренней работой Cassini/WebDev в силу управления этот проект.; -)

Ответ 2

Я не уверен, что я слишком поздно отвечаю, но, хотя известно, что сервер Cassini не поддерживает интегрированный режим конвейера, вы все же можете тестировать локально с помощью классического конвейера, добавив его в раздел httpModules system.web в вашем web.config:

  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    .
    .
    .
    <!-- HTTP Modules using Classic Pipeline -->
    <httpModules>
      <add name="YourHttpModule" type="ACME.YourHttpModule"/>
    </httpModules>
  </system.web>

  <system.webServer>
    <!-- HTTP Modules using Integrated Pipeline -->
    <modules runAllManagedModulesForAllRequests="true">
      <add name="YourHttpModule" type="ACME.YourHttpModule"/>
    </modules>
  </system.webServer>

Вероятно, вы захотите удалить раздел httpModules из своего веб-сайта.

Ответ 3

Получил это сегодня во время работы в visual studio 2012. Нашел причину, по которой визуальная студия запустила старый веб-сервер, который поставляется с 2010 годом, и, как объяснялось выше, он не может работать там. Изменен для IIS Express, щелкнув правой кнопкой мыши по свойствам, выберите вкладку "Веб" и выберите вариант IIS Express. Тогда запуск режима отладки начнется в IIS Express, и это, очевидно, поддерживает такие операции, как Request.Headers.Add или что-то другое, вызвавшее ваше исключение.