HTTP-обработчик работает с использованием Cassini, но не с IIS 6 - PullRequest
6 голосов
/ 05 июня 2009

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

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?

Ответы [ 2 ]

6 голосов
/ 05 июня 2009

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

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

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

3 голосов
/ 05 июня 2009

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

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

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

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

...