2013-03-04 1 views
0

forums.asp.net에서 질문했지만 아무도받지 못했기 때문에 여기에서 시도 할 것이라고 생각했습니다.ReleaseStateRequest 이벤트를 우회하는 ASP.Net - 어떻게?

BeginRequest, ReleaseRequestState 및 EndRequest에 대해 등록하는 HttpModule이 있습니다. 모듈의 주요 목적은 정규 html 페이지를 제공 할 때 생성 된 href의 href에 대한 쿼리 문자열을 다시 쓰고 암호화하는 것이 필요하다는 것입니다. 필터링은 모듈의 ReleaseRequestState 이벤트 처리기 (context.Response.Filter = new MyFilter (...);)에 첨부됩니다.

그러나 XML 문서가 될 페이지를 실행하면 ReleaseRequestState 이벤트 핸들러가 시작되지 않습니다 (BeginRequest 및 EndRequest 만).

많은 검색 결과를 통해 HttpApplication.CompleteRequest()가 많은 이벤트 체인을 우회하여 EndRequest로 직접 이동한다고 말하는 게시물을 발견했지만 어디에도 CompleteRequest()를 호출하지 않았습니다. 그래서 나는 그것을 호출하거나 ReleaseRequestState를 우회하는 다른 방법이 있다고 생각합니다.

우리는 보고서 xml을 생성하도록 설정할 때 Response.Clear()를 수행합니다. Response.OutputStream에 XmlWriter를 만듭니다. 그 중 하나가 ReleaseRequestState 이벤트를 우회하여 무언가를 더 낮추게할까요?

+0

당신은'Response.End()'를 호출합니까? – SLaks

답변

0

XML 문서를 제공하기 때문에 ASP.NET 파이프 라인이 단락되어 있습니다. 사용 된 aspx 페이지가 실행되지 않아서 릴리스 할 상태가 없습니다.

이 문제를 해결하려면 XML 문서 요청과 함께 세션 상태 양식 변수를 게시해야합니다. 프레임 워크가 변수 (및/또는 상태와 관련된 다른 요청 매개 변수)를 볼 때 전체 상태의 수화/탈수 이벤트 사이클을 수행합니다.

편집 : 이 문제에 대해 다시 생각한 후에는 Response.Clear()에 대한 호출로 인해 발생하지 않는 상태 이벤트가 발생한다고 생각합니다. 이 방법을 사용하면 요청에 포함 된 상태 변수를 포함하는 기존 콘텐츠 이 삭제됩니다. BeginRequest 이벤트 핸들러에서 Response.Clear을 호출하는 것으로 보일 수 있으므로 상태가 구문 분석되기 전에 요청에서 지워지고 후속 이벤트에서 설정됩니다. 따라서 릴리스 할 상태가 없으며 이벤트 호출을 건너 뜁니다.

ASP.NET 소스에서 심볼 소스를 다운로드/지적 했습니까? 요청을 받았습니다. 그러면 더 나은 답변이 될 것입니다.

+0

Josh에게 답변 해 주셔서 감사합니다. 나는 내 지위에서 아주 분명하지 않았다. 설명을 추가하고 그 내용이 변경되는지 확인하고 싶습니다. 그것은 * 실행중인 .aspx 페이지 (보고서)입니다. 변경되는 페이지의 출력 일뿐입니다. Response.ContentType을 text/xml 등으로 설정합니다. Response.ContentType을 html 이외의 다른 것으로 변경하면 체인이 짧아 집니까? – user1664043

+0

상태 변수가 응답에서 전송되는지 여부를 감지하는 체인에서 최적화가있을 수 있지만 확실하지는 않습니다. –