2014-02-26 2 views
0

요청 로직이 애플리케이션 로직과 완전히 분리되었습니다.ServiceStack - OnEndRequest 캡처 응답 본문

사전 요청 필터에서 요청/응답을 캡처합니다. 이를 실현하기 위해 요청 컨텍스트를 유지하는 요청 범위 객체를 인스턴스화합니다. 그리고 모든 것이 처리되기 전에 (AppHost의 OnEndRequest 핸들러에서), 나는 db에 글을 씁니다. http req 당 한 행. I는 응답 코드 경로, 방법을 액세스 할 수있어

는 등 신체 요청 헤더를 요청할

이미 배치 된대로 응답 스트림을 사용할 수없는 그러나. 이 논리 뒤에있는 논리는 무엇입니까? 그것은 IIS가 스트림 내용을 유선에 쓴다거나 리소스를 즉시 해제하는 것과 같은 것입니까? OnEndRequest 핸들러에서 Response 본문을 캡처 할 수있는 방법이 있습니까?

감사

답변

1

아니, ServiceStack는 응답이는 ASP.NET 응답에 직접 기록됩니다 스트림 버퍼링하지 않습니다. 이지만 요청을 응답을 닫음으로써 요청 파이프 라인을 통해 언제든지 단락시킬 수있는 경우 글로벌 응답 필터 또는 Custom ServiceRunner을 추가하여 서비스 응답을 캡처 할 수 있습니다.

+0

그래 나도 알아. 사실 이것이 내가 사전 요청 필터에서 모든 것을 가져와 "OnEndRequest"에서 데이터베이스로 덤프하는 이유입니다. 나는 post 요청 필터의 환상을 원했다. 아이디어는 sshttphandlerfactory를 입력하는 모든 요청을 포함하는 요청 로거를 갖는 것입니다. 이 동작은 "짧은 순환"때문에 표준 RequestLogsFeature로는 성립되지 않습니다. 이 시나리오가 고려되지 않은 특별한 이유가 있습니까? –

+0

명상 ?? 단락은 기능이며 응답은 항상 예상대로 응답 스트림에 직접 작성됩니다. 요청 파이프 라인의 첫 번째 항목을보고 모든 요청 (예 : Register a RawHttpHandler)에 대한 알림을 받으면 null을 반환하여 요청을 도용하지 않도록합니다. – mythz

+0

필자는 그러한 로거/기능의 중요성에 대한 귀하의 견해를 얻으려고 노력하고 있습니다. 아마도 ServiceStack (RequestLogFeature는 servicerunner 일)에서 강력하게 고민하지 않기 때문에 관련이 없다고 생각할 이유가있을 것입니다. 하지만 그 대답은 HttpRawHandler를 사용하는 것 같습니다. 나는 내가 의도 한 그대로의 원시 출력 본문에 액세스하지 못한다고 가정하고 있습니다. 이 방법은 응답에 쓰고 요청을 닫는 다른 기능과 분리됩니다. –