2014-10-24 12 views
5

ASP.NET 웹 API에서 HTTP 요청과 응답은 서버의 파이프 라인에서 처리됩니다.메시지 처리기 및 HTTP 모듈?

파이프 라인의 초기 단계에서 일부 논리 또는 전역 동작을 추가하려면 메시지 처리기에서 수행해야합니다. (예 : 인증)

하지만 HTTP 모듈 파이프 라인은 어떻습니까? 이 모든 이야기에 어울리는 곳이 어디죠? enter image description here

(... 더 포함하지만)

http://i.stack.imgur.com/jkQe8.jpg

enter image description here

그러나는 HTTP 모듈 일반 행사보고 :

웹 API 수명주기의 번호 단계에서 찾고

질문 :

- 두 시스템이 결합 된 방식과 위치는 어디입니까? 나는 웹 api와 http 모듈을 포함하는 1 개의 그림이 있다면 어떻게 될까? (쉽게 참조 할 수 있도록 이미지에 숫자를 추가했습니다.)

- 나는 항상 듣고 있습니다. 파이프 라인에서 일찍 처리하려면 메시지 처리기를 사용해야하지만, 예를 들어 HttpModule의 BeginRequest은 어떨까요? 나는이 단계에서 null 인 객체가 있다는 것을 알고 있지만, 나중에 httpmodule의 단계가 HttpContetxt의 객체를 부 풀린다. - 아직 webapi의 사람들은 MessageHandlers를 사용한다. (selfhoster 환경의 사실과 관련이 있는가?)

답변

5

위쪽 그림에 아래 그림을 결합하려면 위쪽 그림의 IHttpHandler 상자가 아래 이미지의 ASPX에 해당하므로 아래쪽 이미지를 맨 아래 왼쪽에 놓습니다. 따라서 8과 9는 IIS ASP.NET 파이프 라인의 일부입니다. IIS 파이프 라인은 모듈 등을 실행하고 처리기가 요청을 처리 할 때 종료됩니다. 웹 API를 사용하면 해당 핸들러는 HttpControllerHandler이되어 이것이 웹 API 파이프 라인이 시작되는 곳입니다. HttpControllerHandler을 보면 요청과 응답이 왼쪽에 해당하는 ASP.NET이고 오른쪽에 해당하는 웹 API는 HttpRequestMesssage이됩니다.

웹 API 파이프 라인에서 가장 먼저 할 수있는 것은 메시지 처리기입니다. HttpModule은 훨씬 더 빠르지 만 웹 API의 일부가 아니라 호스팅입니다. 트레이드 오프는 HttpModule이있는 경우 IIS에서만 사용할 수있는 반면 메시지 처리기는 웹 API 특정 및 호스트 특정 적이기 때문에 모든 호스트에서 실행할 수 있다는 점입니다. 나는 최근에 내 응답에서 내 MSDN 기사를 계속 언급하고 있지만 기사가 질문과 관련이 있습니다. 그래서 나는 다른 것을 가지지 않고 다시 연결시켜야합니다. 여기에 go입니다. 나는 그 기사에서 다른 옵션을 비교했다.

+0

실제로 위대한 articlte, 나는 그것을 두 번 읽었습니다. –