Я разрабатываю веб-сайт ASP.NET MVC 2, предназначенный для Платформы.NET 4.0, с помощью Visual Studio 2010.
Мой 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 />
, они работают. Это, кажется, подразумевает, что веб-сервер разработки работает в классическом режиме.
Как я фиксирую это?
Нет. WebDev.WebServer.exe не поддерживает и не может поддерживать интегрированный конвейер.
Итак, если у вас есть код, который нельзя написать для работы в обеих средах, вам нужно будет использовать локальный IIS для разработки.
По сути, system.web
- это место для настройки сервера webdev, а также обработчиков и модулей IIS5-6. system.webServer
предназначен для обработчиков и модулей IIS7, как вы знаете.
Ссылка :
Каждый запрос в WebDev.WebHost40 (и предыдущих версиях) обрабатывается HttpRuntime.ProcessRequest
(, который не поддерживает интегрированный конвейерный режим ). Этот метод используется во всех трех версиях WebHost.WebServer.dll (ядро WebDev.WebServer.exe )
И слова какого-то чувака , который достаточно хорошо знаком с внутренней работой Cassini / WebDev благодаря руководству этим проектом . ; -)
Я не уверен, что слишком поздно отвечаю, но, хотя известно, что сервер 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 из рабочего файла web.config.