#iis-6 #httphandler
#iis-6 #httphandler
Вопрос:
В настоящее время я борюсь с httphandlers в IIS. Я разрабатываю веб-сайт в .NET4 в VS2010 и Cassini. На этом веб-сайте у меня есть галерея, изображения которой загружаются через мой обработчик. Например http://mywebsite.com/Gallery/123/Pic1.jpg Мой HTTP-обработчик получает идентификатор 123 и возвращает изображение из базы данных (упрощенный).
Итак, все отлично работает в Cassini (против встроенного веб-сервера) и в 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:windowsMicrosoft.netframeworkv4.0.30319aspnet_isapi.dll"/>
</handlers
</system.webServer>
Эта последняя конфигурация работает только с данными в атрибутах module и scriptprocessor…
Но эта конфигурация не работает в IIS6….
Кто-нибудь может мне помочь?
Ответ №1:
Проблема в том, что IIS6 обычно решает, какому обработчику ISAPI передать запрос, используя расширение файла. Таким образом, он видит .jpg
и пытается обслуживать статический файл по этому пути. Это также то, что IIS7 называет классическим режимом. И вы заметите, что ссылаетесь aspnet_isapi.dll в вашей конфигурации, потому что ему нужно указать, что должно с этим справиться. После того, как вы передали его в aspnet_isapi, asp.net запускается конвейер обработки http, и вы можете выполнить свой обработчик.
Самым простым решением было бы найти хост, поддерживающий IIS7. В противном случае вы можете увидеть, есть ли у них какие-либо параметры перезаписи URL. При этом вы можете переписать вещи так, чтобы добавить .ashx к URL-адресу, что позволит IIS6 захватить его и поместить в asp.net конвейер, и ваш обработчик сработает. Вы также можете посмотреть, разрешают ли они сопоставления с подстановочными знаками, но это очень сложная задача для большинства общих хостов.