2017-01-23 3 views
1

Я пишу обработчик для обработки ресурса, и я столкнулся с проблемой, когда реализованный класс IHttpHandler написан под пространством имен.Функция обработки процесса обработчика Ashx не называется

Пожалуйста, найдите код

Не работает СЦЕНАРИЙ

Web.config:

<add name="ResourceHandler" type="PublicSite.Classes.Handlers.ResourceEndpoint, PublicSite" path="Resource.ashx" verb="*" /> 

Свойство: PublicSite.Classes.Handlers.ResourceEndpoint.IsReusable=False

Выпуск: Конструктор ударил и ProcessRequest не вызывается , Создает объект класса, т. Е. Конструктор попадает, но сбой не выполняется на 404 до вызова processrequest.

Рабочий сценарий

Web.config:

<add name="ResourceHandler" type="ResourceEndpoint,PublicSite" path="Resource.ashx" verb="*" /> 

Класс: PublicSite.Classes.Handlers.ResourceEndpoint.IsReusable=True

Конструктор ударил и не по 404 до ProcessRequest вызывается.

Второй раз, когда мы запрашиваем обработчик, он сразу же использует сконструированный объект, поэтому construcotr не вызывается, а ProcessRequest вызывается напрямую. Кстати, во втором вызове обработчик работает.

Я не требую многоразового использования. Может ли кто-нибудь помочь мне найти проблему. Благодарю.

+0

Вы используете фактический файл .ashx, а также регистрируете его в веб-конфигурации? –

+0

Возможно, даже если обработчик находится в пространстве имен, вам нужно только имя класса без пространства имен в строке конфигурации? –

+0

Какую версию IIS вы используете? для 6 и ниже вам нужно зарегистрировать обработчик под , но для 7 и выше он находится в разделе в web.config – sh1rts

ответ

1

Можете ли вы подтвердить мне, что ваш web.config и обработчик сам выглядит следующим образом? (Это из проекта размещенного под IIS 7.5)

web.config: -

<system.webServer> 
    <handlers> 
     <add name="customerHandler" 
      preCondition="integratedMode" 
      verb="*" 
      path="customerHandler.ashx" 
      type="GlassCMS.HttpHandlers.CustomerHandler, GlassCMS"/> 
. 
. 
. 
    </handlers> 
    </system.webServer> 

HttpHandler: -

[WebService(Namespace = "http://{redacted.com}/json-http-handlers/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    public class CustomerHandler : IHttpHandler 
    { 
     public bool IsReusable 
     { 
      get { return false; } 
     } 

     public void ProcessRequest(HttpContext context) 
     { 
      string json = string.Empty; 

      // code to do whatever here... 

      context.Response.Write(json); 
     } 

я могу включать JavaScript, а если вы хотите (или можно разместить здесь здесь). Этот пример выше из рабочего кода.

+0

Спасибо, что работает. –

Смежные вопросы