2011-01-05 2 views
1

Response.BinaryWrite()으로 이미지를 반환하는 asp.net 페이지를 만들었습니다. 이 잘 작동하지만 다음 quesion 있습니다.웹 페이지 처리 중지

Page_PreLoad 이벤트에서 Response.BinaryWrite()으로 전화합니다. asp.net은 페이지의 "정상적인"실행을 계속하여 Unload 이벤트로 진행하며, 원하는 모든 작업이 이미 완료 되었기 때문에 더 이상 필요하지 않은 많은 작업을 수행합니다. 맞습니다. 그렇다면 추가 처리가 더 이상 필요하지 않음을 asp.net에 알릴 가능성이 있습니다.

업데이트 : 모든 해답에 대한

감사합니다. 제안한대로, 나는 ASHX-Handler를 사용했다. 모두에게 감사하고이 방향에 대한 모든 대답을 +1합니다. 나처럼 똑같은 질문을하는 데이비드 스트랫튼 (David Stratton)의 링크는 그것을하는 방법에 대한 아주 간단한 방법을 보여줍니다.

+0

와우, 우리는 모두 httphandler 아이디어를 내놓을 수있었습니다. – David

답변

10

Application.CompleteRequest() 이렇게하면됩니다.

ASP.NET이 모든 이벤트를 무시하고 HTTP 파이프 라인 실행 체인에서 필터링하여 EndRequest 이벤트를 직접 실행하도록합니다.

그것은 Page 클래스에서이 방법으로 액세스 할 수 있습니다 만 이미지를 반환하려는 경우, 당신은 (IHttpHandler를 구현하는 클래스)는 HTTP 핸들러를 생성하지하여야한다,

Context.ApplicationInstance.CompleteRequest(); 

그러나 Page을 사용하십시오. HTTP 처리기를 만드는 방법에 대한 MSDN 문서는 this을 참조하십시오.

+0

나는 Response.CompleteRequest를 찾을 수 없으며 HttpApplication 인스턴스, 링크 된 msdn 설명 (죄송합니다. asp.net과 관련하여 매우 드물게)에 액세스하는 방법을 모르겠습니다. 액세스 방법을 안내해 주시겠습니까? – HCL

+0

@HCL - 답변이 업데이트되었습니다. – Oded

2

당신 말이 맞습니다. 그러나 Page을 사용하여 이미지를 반환해서는 안됩니다. 대신 HttpHandler을 사용하십시오. 대신 페이지

2

사용 IHttpHandler 당신은 Response.End() 찾고 있습니다.
그러나 ASPX 기능 세트를 사용하지 않으므로 코드를 ASHX 처리기로 옮겨야합니다. ASHX 처리기는 처음에 피하려고하는 작업을 수행하지 않습니다.
그러면 Response.End이 필요하지 않으며 성능도 향상됩니다.

1

귀하의 질문에 대한 직접적인 대답은 아니지만 페이지 라이프 사이클의 오버 헤드를 없애기 위해 페이지를 ashx http handler으로 변경할 수 있습니다.

http://support.microsoft.com/kb/308001

+0

+1 링크를 제공해 주셔서 감사합니다. 나는 oded의 대답을 받아 들였다. 왜냐하면 그는 또한 초기 게시물에 대답했기 때문이다. 하지만 당신의 ashx 솔루션을 사용했습니다. 고마워. – HCL