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

Я занимаюсь разработкой веб-сайта ASP.NET MVC 2, предназначенного для .NET Framework 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 />, они работают. Кажется, это означает, что веб-сервер разработки работает в классическом режиме.

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

Ответы [ 3 ]

22 голосов
/ 25 апреля 2010

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

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

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

Ссылки

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

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

4 голосов
/ 19 июля 2013

Получил это сегодня во время работы в Visual Studio 2012. Обнаружена причина, по которой Visual Studio запустила старый веб-сервер, который идет с 2010 года, и, как объяснено выше, там работать не может. Изменен на IIS Express, щелкнув правой кнопкой мыши на свойства, выберите вкладку «Интернет» и выбрав опцию IIS Express. Затем запуск режима отладки начнется в IIS Express, и это, по-видимому, поддерживает такие операции, как Request.Headers.Add или все, что вызвало ваше исключение.

4 голосов
/ 25 августа 2010

Я не уверен, что опоздал с ответом, но хотя известно, что сервер 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.

...