HTTP Handler работает с Cassini, но не с IIS 6

Я создал образец проекта, чтобы упростить мою задачу. У меня есть такой простой обработчик:

public class HandleThis : IHttpHandler, IRequiresSessionState
{

    public void ProcessRequest( System.Web.HttpContext context )
    {
        // Score.aspx just says "success"
        context.Response.Redirect( "Score.aspx" );
    }

    public bool IsReusable { get { return true; } }
}

Затем в моем конфиге есть следующее:

<httpHandlers>
<add verb="*"
path="Survey"
type="HttpHandlerTest.HandleThis, HttpHandlerTest" />

Теперь, когда я нажимаю http://server/Survey, срабатывает мой обработчик.

Если я изменю свой проект для работы с IIS 6, он не сработает (404). Я попытался вручную добавить обработчик в IIS через: - Свойства веб-сайта - Домашний каталог - Конфигурация - Добавить (перейдите к .dll моего сайта), Расширение: Опрос, снимите флажок «Проверить, существует ли файл»

Я заметил, что IIS (очень услужливо) добавляет "." перед моим расширением, поэтому я попал на сайт с помощью "b.Survey"; все еще 404.

Неужто в IIS 6 можно добавить обработчик?


person dudeNumber4    schedule 05.06.2009    source источник


Ответы (2)


«Я попытался вручную добавить обработчик в IIS через: - Свойства веб-сайта - Домашний каталог - Конфигурация - Добавить (перейдите к .dll моего сайта), Расширение: Опрос, снимите флажок« Проверить, существует ли файл »

Похоже, вы используете неправильный путь к исполняемому файлу. Путь к исполняемому файлу должен указывать на dll aspnet isapi, а не на dll, содержащую вашу реализацию HttpHandler.

Попробуйте использовать тот же путь, который сопоставлен с расширением .aspx (часто это: c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll).

person etorrejon    schedule 05.06.2009
comment
Когда я это делаю, я получаю совершенно пустой ответ. - person dudeNumber4; 05.06.2009
comment
Я так понимаю, вас на самом деле не перенаправляют на Score.aspx? Вы переходите к URL-адресу сервера / опроса с использованием подстановочного знака (*) в IIS? - person etorrejon; 05.06.2009
comment
Я только что осознал свою проблему; после того, как я изменил путь к исполняемому файлу, чтобы он указывал на aspnet, мне нужно было исправить то, что у меня было в моей конфигурации (я изменил расширение на .wtf в IIS, поэтому мне нужно было изменить конфигурацию на path = *. wtf - person dudeNumber4; 05.06.2009

В Cassini все проходит через ваш сервер разработки, даже если программирование на сервере вызовет исключение, если вы попытаетесь использовать его в интегрированном режиме.

В IIS7 это будет работать, если вы запустите приложение в интегрированном режиме.

В IIS6 вам нужно либо назначить path = "*" для ASPNET_ISAPI.dll, а затем иметь тот же цитируемый код, что и выше в вашем web.config, либо вам нужно назначить расширение в пути для вашего обработчика.

Если у вас возникли проблемы с добавлением aspnet isapi as * в IIS6, введите в Google запрос «IIS6 без расширений» или что-то подобное для получения пошаговых руководств.

person Community    schedule 05.06.2009
comment
Думаю, я сделал вид, что мне нужен обработчик для URL без расширения; Я не. Я просто хочу, чтобы мой куратор выстрелил. Если я наберу wtf в качестве расширения в диалоговом окне сопоставлений / расширений приложений IIS и попытаюсь нажать a.wtf, он все равно не сработает. - person dudeNumber4; 05.06.2009
comment
Да, ну, я намекал, что web.config и asp.net isapi должны совпадать, а ваше текущее решение этого не делает. Во всяком случае, похоже, что другой человек сформулировал это лучше для вас. - person ; 06.06.2009