Обработчики HTTP в классическом режиме IIS6 или IIS7 - PullRequest
2 голосов
/ 01 октября 2011

В настоящее время я борюсь с httphandlers в IIS. Я занимаюсь разработкой веб-сайтов на .NET4, VS2010 и Cassini. На этом сайте у меня есть галерея, фотографии которой загружаются через мой обработчик. Например http://mywebsite.com/Gallery/123/Pic1.jpg Мой HTTP-обработчик получает идентификатор 123 и возвращает изображение из базы данных (упрощенно).

Итак, все отлично работает в Cassini (встроенный веб-сервер VS) и в IIS7 в «интегрированном режиме». Фотографии загружаются так, как должны.

Но мне нужно развернуть этот сайт на общедоступном хостере, который использует IIS6.

После многих поисков и собственной регистрации я обнаружил, что запрос не направляется моему обработчику, и поэтому я получаю 404 от IIS.

Мое определение, которого достаточно для интегрированного режима IIS7:

<system.web>
   <handlers>
       <add verb="*" path="Gallery/*/*" type="[coorect Type spec]" />
   </handlers>
</system.web>

Для IIS7 в классическом режиме мне пришлось добавить

<system.webServer>
    <handlers>
        <add name="ImageHandler" verb="*" path="Galler</*/*" type="[type]" modules="IsapiModule" scriptProcessor="c:\windows\Microsoft.net\framework\v4.0.30319\aspnet_isapi.dll"/>
    </handlers
</system.webServer>

Этот последний конфиг работает только с атрибутами модуля и скрипта-обработчика ...

Но этот конфиг не работает в IIS6 ....

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 01 октября 2011

Проблема в том, что IIS6 обычно решает, какому обработчику ISAPI передать запрос, используя расширение файла.Таким образом, он видит .jpg и пытается обработать статический файл по этому пути.Это также то, что IIS7 называет классическим режимом.И вы заметите, что вы ссылаетесь на aspnet_isapi.dll в вашей конфигурации, потому что нужно указать, что должно с этим справиться.Как только вы передадите его в aspnet_isapi, включится конвейер обработки http asp.net, и вы сможете выполнить свой обработчик.

Самое простое решение - найти хост, поддерживающий IIS7.В противном случае вы можете увидеть, есть ли у них какие-либо варианты перезаписи URL.С этим вы можете переписать вещи так, чтобы вы добавили .ashx к URL, что позволит IIS6 захватить его и поместить в конвейер asp.net, и ваш обработчик сработает.Вы также можете увидеть, разрешают ли они сопоставления с подстановочными знаками, но это очень высокий порядок для большинства общих хостов.

...