Почему меня не называет 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.