ASP.NET HttpHandler не вызывается, если нет сеанса

Я создал очень простой ASP.NET HttpHandler, и по какой-то причине он не вызывается, если пользователь не вошел в систему. Я назначил его для обработки изображений PNG. При первом посещении сайта обработчик не вызывается. После того, как они входят в систему, она вызывается. Я использую .NET 4, IIS7 в Windows 7 в классическом режиме. Запрошенные изображения PNG не существуют в каталоге файлов.

namespace MyNS
{
   public class MyHttpHandler : IHttpHandler 
   {
       public bool IsReusable { get { return true; } }
       public void ProcessRequest( HttpContext context ) 
       { }
   }
}

В моем web.config у меня есть...

<system.webServer>
    <handlers>
   <add name="MyPNG" path="*.png" verb="*" type="MyNS.MyHttpHandler" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,bitness64" />
    </handlers>
</system.webServer>

person Ron    schedule 25.10.2011    source источник
comment
вам, конечно же, не нужно жестко указывать такой путь в web.config: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll   -  person Davide Piras    schedule 25.10.2011
comment
Каковы настройки безопасности в вашем файле web.config?   -  person Emmanuel N    schedule 25.10.2011
comment
@Davide, какой путь я бы использовал?   -  person Ron    schedule 25.10.2011
comment
@Emmanuel - включен анонимный доступ и включена проверка подлинности с помощью форм   -  person Ron    schedule 25.10.2011


Ответы (1)


Прежде всего, если вы используете IIS7 в классическом режиме, вы должны настроить конфигурацию в двух местах: ссылка.

Также вам нужно исключить ваш обработчик из аутентификации:

<location path="myhandler URL">
            <system.web>
                    <authorization>
                            <allow users="*"/>
                    </authorization>
            </system.web>
</location>

ОБНОВИТЬ

Хорошо, вот что я имею в виду:

<location path="*.png">
            <system.web>
                    <authorization>
                            <allow users="*"/>
                    </authorization>
            </system.web>
</location>
person Aliostad    schedule 25.10.2011
comment
Возможно, вы что-то здесь знаете, но URL-адреса для IHttpHandler нет. - person Ron; 25.10.2011
comment
Да, есть. Это путь =› path="*.png" - person Aliostad; 25.10.2011
comment
Спасибо, это решило проблему, но я думаю, что все еще немного запутался. Если я помещаю реальное изображение в путь, оно отображается без настройки местоположения (через обычный HTTP-запрос). Но если файл изображения не существует, то для вызова обработчика http требуется его местоположение. Итак, похоже, теперь я должен пойти и установить настройку местоположения для всех возможных путей изображения. Хотя, если у меня есть настоящие файлы изображений, они отлично работают без аутентификации. Странный. - person Ron; 25.10.2011
comment
Да, вам придется. Но я полагаю, что ваши изображения в основном расположены в одном центральном каталоге, поэтому это должно быть легко. Может быть универсальный формат, например */*.png, который стоит попробовать. - person Aliostad; 25.10.2011