2017-03-01 1 views
0

다음과 같이 내가이 사건에 가입 재정의 HttpApplication.Init() 방법은 이벤트 핸들러를 통과 한 후 눈에 띄는 이유 응답 : 하나는

public override void Init() 
{ 
    base.Init(); 

    BeginRequest += AnUsefulClass.OnBeginRequest; 
    PreSendRequestHeaders += AnUsefulClass.OnPreSendRequestHeaders; 
} 

그래서 나는 약간 임시 헤더를 추가 할 싶어요. 문제는 말, 밖으로에 대한 응답, 30 개 들어오는 요청에도 성공적으로이 이벤트 핸들러 내의 짜릿한 논리가없는

(IIS 로그 및 저널에 따라) 처리 (하지만했다되고있는 달려 있습니다 것입니다 이전의 과정) :

public static void OnBeginRequest(object sender, EventArgs e) 
{ 
    //lock (Lock) 
    { 
     try 
     { 
      var app = sender as HttpApplication; 

      if (app == null) return; 

      // the logic was here 
     } 
     catch { } 
    } 
} 

public static void OnPreSendRequestHeaders(object sender, EventArgs e) 
{ 
    //lock (Lock) 
    { 
     try 
     { 
      var app = sender as HttpApplication; 

      if (app == null) return; 

      var context = app.Context; 
      var response = context.Response; 

      // the logic was here 
     } 
     catch { } 
    } 
} 

그래도 같은 결과 IHttpModule의 사용자 정의 구현을 적용하려고 노력했다.

은 실패한 요청 추적은 다음과 같은 꼬리와 보고서를 IIS :

===================================================================================================================== 
167. GENERAL_FLUSH_RESPONSE_END BytesSent="782", ErrorCode="The operation completed successfully. (0x0)" 08:30:26.936 
===================================================================================================================== 
168. AspNetHttpHandlerLeave 08:30:26.936 
===================================================================================================================== 

그러나 아무것도 더. 게다가 거기에 의심스러운 단어가 보이지 않습니다. 나를 위해 그것은 응답을 기다리는 것이 영원히 필요합니다. 어제의 것들은 여전히 ​​집으로 가고 있습니다 :)

도움을 주시면 감사하겠습니다.

+0

게시 한 정확한 코드가 여전히 문제의 원인입니까? – Yura

+0

@Yura 네, 맞습니다. 그것은 아무것도하지 않습니다. –

+1

이 이벤트 처리기를 제거하면 코드가 멈추지 않는 것을 확인할 수 있습니까? 당신이 묘사 한 것 (결코 리턴되지 않는 응답)은 컨트롤러 로직의 어딘가에서 교착 상태의 증상처럼 보입니다. – Yura

답변

0

here과 마찬가지로 "PreSendRequestHeaders"이벤트로 인해 WebApi가 관리되는 모듈과 결합 할 때 예기치 않은 문제가 발생할 수 있습니다.

매우 동일한 문제 (그러나 다른 시나리오)는 thread에 설명되어 있습니다.

어쨌든 응답에 헤더를 추가하는 것이 목표라면 WebApi 용 ActionFilter를 안전하게 사용할 수 있습니다.

+0

답장으로 지연되어 사과드립니다.) 예, 관련 스레드에 설명 된 증상은 예외적으로 같습니다. 나는 그 주위를 굉장히 인터넷 검색을했고, 그것들은 모두 다른 경우에'PreSendRequestHeaders' 이벤트의 예측할 수없는 행동에옵니다. 그래서 우리는 기존의 흐름을 조정하여 대신'ActionFilter'를 사용하기로 결정했습니다. –

관련 문제