2017-01-23 3 views
1

자원을 처리하기 위해 처리기를 작성 중이며 구현 된 IHttpHandler 클래스가 네임 스페이스 아래에 작성되면 문제가 발생합니다.Ashx 처리기의 processrequest 함수가 호출되지 않았습니다.

의 Web.config 시나리오를 작동하지 않는 코드

을 찾아주세요 :

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

속성 : PublicSite.Classes.Handlers.ResourceEndpoint.IsReusable=False

문제 : 생성자가 충돌하고이 ProcessRequest가 호출되지 않습니다 . 클래스의 오브젝트를 구축합니다. 즉, constructor가 히트하지만, processrequest가 불려 가기 전에 404에 의해 실패합니다.

작업 시나리오

의 Web.config :

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

등급 : PublicSite.Classes.Handlers.ResourceEndpoint.IsReusable=True 생성자 공격하고 processRequest라는 호출하기 전에 (404)에 의해 실패

.

처리기를 요청할 때 두 번째로 곧바로 생성 된 개체를 사용하므로 construcotr이 호출되지 않고 ProcessRequest가 직접 호출됩니다. 그런데 두 번째 호출에서 핸들러가 작동합니다.

재사용 할 수있는 속성이 필요 없습니다. 문제를 찾을 수있는 사람이 있습니까? 감사.

+0

실제 .ashx 파일을 사용하고 있습니까? 웹 구성에 등록하고 있습니까? –

+0

핸들러가 네임 스페이스에 있더라도 네임 스페이스가없는 클래스 만 구성 라인에 필요로 할 수 있습니다. –

+0

어떤 버전의 IIS를 사용하고 있습니까? 6 이하에서는 아래에서 핸들러를 등록해야하지만 7 이상에서는 web.config의 섹션에 있습니다. – sh1rts

답변

1

web.config 및 처리기 자체가 다음과 같은지 확인할 수 있습니까?

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

HttpHandler를 : - - :

의 Web.config (이것은 IIS 7.5에서 호스팅되는 프로젝트입니다) (나뿐만 아니라 당신이 원하는 경우 자바 스크립트를 포함 할 수 있습니다

[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); 
     } 

당신이나 여기에 게시 할 수 있습니다.) 위의 예제는 작업 코드에서 가져온 것입니다.

+0

고마워요. –