Почему меня не называет IHttpHandler?

Я пытаюсь заставить пользовательский обработчик работать с определенным URL (или набором URL-адресов) в ASP.NET 3.5.

Обработчик фактически не делает ничего существенного - он просто регистрирует запрос. Я могу опубликовать код, если он имеет значение, но я действительно не думаю, что его вообще называют. (В частности, для нормальных исключений я получаю пользовательскую страницу ошибок и протоколирование... здесь я просто получаю ванильный IIS 404.)

Здесь соответствующий бит файла web.config:

<system.web>
  <httpHandlers>
    <add verb="GET,POST" path="*.robot" validate="false" 
         type="CSharpInDepth.Wave.RobotHandler, CSharpInDepth"/>
  </httpHandlers>
</system.web>

(Очевидно, что в этом разделе есть и другие вещи, но я не думаю, что это релевантно.)

Локально, работая под сервером dev, он отлично работает. На моей реальной коробке я всегда получаю 404. Все под каталогом веб-сайта одинаково (реплицируется через svn). Это включает каталог bin, содержащий CSharpInDepth.dll, который я проверил, содержит CSharpInDepth.Wave.RobotHandler.

Я пытаюсь извлечь http://csharpindepth.com/foo.robot и просто получить 404.

Я пробовал с и без имени сборки, конкретных URL-адресов или подстановочных... ничего не работает.

Я уверен, что я просто пропустил какой-то простой флаг где-то в конфигурации IIS, но я взорван, если найду его...

EDIT: это версия IIS 6. Попытка добавить *.robot к фильтру ISAPI теперь...

Ответ 1

Хорошо, если ящик для размещения - это IIS7 в интегрированном конвейере, вам нужно добавить его в другой бит конфигурации:

<system.webmodules>
  ....
  <modules>
    <add name="RobotHandler" type="CSharpInDepth.Wave.RobotHandler, CSharpInDepth"/>
  </modules>
  ....
</system.webmodules>

Если это IIS6, вам нужно будет сопоставить *.robots с ASP.NET ISAPI DLL.

(Для не Skeets вы делаете это следующим образом)

  • Откройте администратор IIS.
  • Щелкните правой кнопкой мыши веб-сайт, который вы хотите настроить и выберите "Свойства". контекстное меню. Это отобразит Диалог свойств веб-сайта.
  • Выберите на вкладке Home Directory и нажмите Кнопка конфигурации. Это будет отобразить приложение Диалоговое окно конфигурации.
  • Нажмите Добавить.
  • Выберите aspnet_isapi.dll из каталога .NET framework, расширение, которое вы хотите сопоставить и либо все глаголы, либо просто те вы хотите отобразить.
  • Нажмите "ОК".

Ответ 2

Джон

Вам нужно будет настроить сопоставления IIS script для передачи *.robot в aspnet_isapi.dll.