Общий обработчик не работает на IIS - PullRequest
1 голос
/ 26 октября 2011

Что меня заинтересовало, так это то, что универсальный обработчик прекрасно работает, когда я запускаю веб-приложение на сервере разработки Visual Studio ASP.NET. Когда я изменяю конфигурацию, чтобы запустить ее непосредственно из IIS, обработчик просто умирает.

Я не очень разбираюсь в этом, так что держись со мной.

Это обработчик изображения, он записывает массив байтов, которые будут отображаться в объекте Image. Как я уже сказал, он отлично работает в VS Development Server, но не работает на IIS. Его даже не называют ...

Ошибка, которую я получаю, когда пытаюсь вызвать ее напрямую, заключается в следующем:

Parser Error Description: Произошла ошибка во время анализа ресурс, необходимый для обслуживания этого запроса. Пожалуйста, просмотрите следующее конкретная информация об ошибке разбора и изменение исходного файла соответственно. Сообщение об ошибке парсера: не удалось создать тип 'YourImageHandler. Ошибка источника: строка 1: <% @ WebHandler Language = "C #" CodeBehind = "YourImagehandler.ashx.cs" Class = "YourImageHandler"%>

Есть идеи?

EDIT:

Подробнее:

Обработчик на web.config:

<system.web>
    <httpHandlers>
      <add verb="*" path="*.ashx"  type="YourImageHandler"/>
    </httpHandlers>
</system.web> 

Общий обработчик находится в той же сборке веб-проекта, и все это выполняется на IIS 7.

Ответы [ 3 ]

8 голосов
/ 26 октября 2011

Если вы используете IIS 7 в конвейерном режиме, то определение обработчика должно находиться в Как это:

<system.webServer>
<handlers>
    <add name="YourImageHandlerName" path="*.ashx" verb="*" type="YourImageHandler" />
</handlers>
</system.webServer>

Проверьте здесь: http://blogs.msdn.com/b/tmarq/archive/2007/08/30/iis-7-0-asp-net-pipelines-modules-handlers-and-preconditions.aspx

IIS 7.0 имеет два конвейерных режима: встроенный и классический. Последний является иногда упоминается как режим ISAPI.

Интегрированный режим позволяет как управляемым, так и собственным модулям регистрироваться для события в конвейере IIS. Это позволяет много новых сценариев, таких как применение проверки подлинности форм ASP.NET к запросам не на ASP.NET (статический файлы, классические файлы ASP и т. д.).

Классический режим идентичен IIS 6.0. В классическом режиме ASP.NET конвейер (BeginRequest, AuthenticateRequest,…, EndRequest) выполняется полностью в событии EXECUTE_REQUEST_HANDLER конвейера IIS. Думайте о ASP.NET в классическом режиме как о конвейере внутри конвейера.

Другой вариант - запустить ваш сайт в «классическом» режиме, в классическом режиме IIS 7 работает так же, как IIS 6, и имеет то же поведение (что важно здесь), что и ваш веб-сервер Cassini.

Надеюсь, что поможет.

3 голосов
/ 02 июня 2016

Вы должны добавить атрибут preCondition в файл web.config

    <add name="HandlerName" verb="*" path="Handlers/HandlerName.ashx" type="Namespace/HandlerClassName, MyAssembly, Version=1.0.*, Culture=neutral" preCondition="classicMode,runtimeVersionv4.6.1"/>

Это работает для моей ошибки сейчас.

0 голосов
/ 26 октября 2011

Я думаю, вам следует добавить сопоставление управляемого обработчика в IIS.недостаточно добавить конфиг.Вы можете посмотреть здесь .

...