2015-03-09 4 views
1

Я разрабатываю приложение, которое было размещено на IIS 6, и мы только что обновили наш сервер, который использует IIS 8.5, но не может заставить его работать на новом сервере.ASP.Net перемещение пользовательских обработчиков HTTP в IIS 8.5

Приложение имеет пользовательский обработчик, который вызывается, когда запрашивается файл с расширением .XmlDataTypes.

Для этого, чтобы работать в IIS6 Я настроил отображение как:

Extension: Путь».XmlDataTypes': 'C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll' Глаголы: все.

В Web.config:

<httpHandlers> 
    <add verb="*" path="*.XmlAmenityData" type="XmlHandler"/> 
    <add verb="*" path="*.XmlDataTypes" type="XmlDataTypes"/> 
</httpHandlers> 

И это работает отлично.

В IIS8.5 Я попытался добавить Managed Handler с:

запрашиваемого пути: '*' .XmlDataTypes Типа :, Selected 'XmlDataTypes' Имени: XmlDataTypes

Это затем добавил к файл web.config:

<system.webServer> 
    <handlers> 
     <add name="XmlAmenityData" path="*.XmlAmenityData" verb="*" type="XmlHandler" resourceType="File" preCondition="integratedMode" /> 
     <add name="XmlDataTypes" path="*.XmlDataTypes" verb="*" type="XmlDataTypes" resourceType="File" preCondition="integratedMode" /> 
    </handlers> 
</system.webServer> 

Когда я запускаю страницу, которая запрашивает URL с расширением .XmlDataTypes с помощью функции JQuery я просто получаю 404 не найдена ошибка.

Заранее благодарим за любую помощь.

J.

ответ

1

Похоже, те файлы на диске. Если это так, ваше решение может быть таким же простым, как добавление следующего к вашему web.config в разделе «system.webServer».

<staticContent> 
    <mimeMap fileExtension=".XmlAmenityData" mimeType="application/xml" /> 
    <mimeMap fileExtension=".XmlDataTypes" mimeType="application/xml" /> 
</staticContent> 

Всё.

Однако, если вы действительно полагаетесь на обработчики HTTP, обратите внимание, что «Тип» должен быть полностью квалифицирован с наименованием сборки.

Таким образом, ваш тип также должен содержать пространство имен.

В вашем коде «XmlHandler» не полностью соответствует пространству имен, и сборка не упоминается. Убедитесь, что это так.

Наконец, измените «resourceType» на «Unspecified», или IIS обеспечит подлинность файла перед выполнением вашего обработчика.

+0

Нет физического файла, который обрабатывает некоторый VB, если запрашивается расширение .XmlDataTypes. – JBoom

+0

Обновлен мой ответ. –

+0

Спасибо, я только что нашел ответ где-то в другом месте, но это был resourceType = «Unspecified», поскольку по умолчанию он имеет значение «Файл». – JBoom

0

Ни один из ответов, которые я нашел здесь, или похожие вопросы о stackoverflow не работал для меня.

Я использую IIS 8.5, .Net v4.0, Integrated, и по-прежнему получать 404 со следующей конфигурацией обработчика:

<system.webServer> 
    <handlers> 
     <add name="testEmail" path="*.em" verb="*" type="MyApp.testRazorEmailHandler, MyApp" resourceType="Unspecified" requireAccess="Script" /> 
    </handlers> 
</system.webServer> 


Я позволил трассировке и обнаружил следующее:

116. -HANDLER_CHANGED 

    OldHandlerName    testEmail 
    NewHandlerName    System.Web.Mvc.MvcHandler 
    NewHandlerModules   ManagedPipelineHandler 
    NewHandlerScriptProcessor 
    NewHandlerType    System.Web.Mvc.MvcHandler, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 


Как вы можете посмотрите, как он правильно подобрал запрос, используя мой пользовательский HttpHandler testEmail, но MVC украл его.
Я открыл определение маршрута в RouteConfig.cs и обнаружил, что добавление:

routes.IgnoreRoute("{resource}.em"); 

Я получил его игнорировать запросы, предназначенные для моего Handler.
Надеюсь, это поможет кому-то - я вырвал волосы!