Веб-сервер разработки 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 />
, они работают. Это означает, что веб-сервер разработки работает в классическом режиме.
Как это исправить?
Ответы
Ответ 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
или что-то другое, вызвавшее ваше исключение.