2011-06-23 18 views
115

Czy ktoś może wyjaśnić w mniej niż dwóch zdaniach różnicę między nimi? Tak, wiem, że Google może dostarczyć setki odpowiedzi, ale nie jeden w 2 jasnych zdaniach :)Moduł obsługi HTTP a HTTP

+0

W jakim kontekście? – Flimzy

+0

W kontekście poszukiwania kodu przed każdym żądaniem. – frenchie

+18

+1 dla "tak, wiem, że mogę to zrobić Google". – Csharp

Odpowiedz

254

HttpHandler jest, gdy pociąg jest kierowany wniosek. HttpModule to stacja po drodze.

+4

To powinna być zaakceptowana odpowiedź. –

+39

Świetne wyjaśnienie inline .. jesteś shakespeare programowania. !!! – Pranav

+0

Cudowne wytłumaczenie! :) –

181

dwóch zdaniach:

HttpModule wykona dla każdego żądania do aplikacji, niezależnie od rozszerzenia, i jest powszechnie stosowany w przypadku zabezpieczeń, statystyk, rejestrowania itp.

HttpHandler jest na ogół związany z określonym rozszerzeniem i jest używany do takich elementów, jak kanały RSS, generowanie lub modyfikacja dynamicznego obrazu i tym podobne.

Nieco bardziej wyjaśnienie jeśli to nie jest całkowicie jasne:

Sposób myślę o nich - moduły „plug w” na żądanie rurociągu, natomiast Ładowarki „rączki” określonego rozszerzenia pliku. Tak więc, jeśli masz stronę z LoggingModule i PdfHandler, oba będą wykonywane na żądanie do http://example.com/sample.pdf, a moduł rejestrowania sam będzie wykonywany na żądanie do http://example.com/page.aspx.

Jest całkiem jasne, artykuł o różnicy na MSDN: HTTP Handlers and HTTP Modules Overview

+0

ok, więc jeśli chcę uruchomić jakiś kod, który działa przy każdym żądaniu do pliku .aspx, implementuję program obsługi i jeśli chcę uruchomić jakiś kod na każdym żądaniu niezależnie od typu żądanego pliku, implementuję moduł. Czy to to? – frenchie

+4

@frenchie - Nie, strony aspx są zbudowane na HttpHandlers, zapewniając Ci cykl życia strony. Pomyśl o tym jako o aspxowej stronie, ograniczonej do bardzo podstawowego wydarzenia. 'ProcessRequest'. Moduł z drugiej strony zostanie wykonany w dowolnym momencie cyklu życia, do którego go podłączasz. W przypadku scenariusza, w którym chcesz uruchomić coś przed stroną aspx, potrzebujesz modułu. Jednak trzeba ręcznie odfiltrować żądania do stron, które nie są .aspx – Phill

+5

Czy mam rację mówiąc, że każde żądanie może mieć tylko 1 moduł obsługi i wiele modułów? –

15

Obsługa HTTP to proces uruchamiany w odpowiedzi na żądanie zgłoszone do aplikacji sieci Web ASP.NET. Moduły HTTP umożliwiają sprawdzanie przychodzących i wychodzących żądań i podejmowanie działań na podstawie żądania.

+1

W tym sensie aspx można uznać za typ httphandler? – frenchie

+14

Tak Frenchie..Otwórz kod każdego aspx. Zobaczysz: public partial class good: System.Web.UI.Page Teraz kliknij prawym przyciskiem myszy na stronie i kliknij Przejdź do definicji, zobaczysz: klasa publiczna Strona: TemplateControl, IHttpHandler –

1

Obsługa HTTP to miejsce, w którym faktycznie kompilacja odbywa się w oparciu o ustawienia. np. jeśli rozszerzenie strony to .aspx, to zostanie skompilowane przez system.web.Ui.Pagahandlefactory. kiedy kompilacja zostanie wykonana, żądanie obsługi HTTP przejdzie przez moduł HTTP i IIS.

2

Nicea artykuł aboute to HttpModule-and-HttpHandlers

referencyjny: INFO: ASP.NET HTTP i modułów HTTP Rączki Przegląd

„Moduły nazywane są przed i po obsługi wykonuje. Moduły pozwalają programistom przechwytywać, uczestniczyć lub modyfikować każde indywidualne żądanie. Procedury obsługi są używane do przetwarzania poszczególnych żądań punktów końcowych. Procedury obsługi umożliwiają programowi ASP.NET Framework przetwarzanie indywidualnych adresów URL HTTP lub grup rozszerzeń adresów URL w aplikacji. W przeciwieństwie do modułów, tylko jeden moduł obsługi jest używany do przetwarzania żądania ".

+0

Dziękuję, to mi bardzo pomaga –

1

HttpHandler jest odpowiedzialny za obsługę żądania HTTP, podczas gdy HttpModule odpowiada na zdarzenia cyklu życia aplikacji.

13

Głównym i wspólnym celem HttpHandler i HttpModule jest wstrzykiwanie logiki przetwarzania wstępnego, zanim żądanie ASP.NET dotrze do serwera IIS.

Program ASP.NET zapewnia dwa sposoby wprowadzania logiki do potoku żądania;

  1. Http Rączki: Http Handler pomaga nam wprowadzić logikę wstępnego przetwarzania na podstawie rozszerzenia nazwy pliku wezwanego. ASP.NET używa procedur obsługi HTTP do implementacji wielu własnych funkcji. Na przykład program ASP.NET używa procedur obsługi do przetwarzania plików .aspx, .asmx i trace.axd.

przykład: Kanały RSS: Aby utworzyć kanał RSS dla witryny sieci Web, można utworzyć moduł obsługi emitujący format XML w formacie RSS. Kiedy użytkownicy wysyłają żądanie do witryny kończącej się rozszerzeniem .rss, program ASP.NET wywołuje procedurę obsługi, aby przetworzyć żądanie.

Istnieją trzy etapy tworzenia programu Handler 1. Zaimplementuj interfejs IHttpHandler. 2. Zarejestruj program obsługi w pliku web.config lub pliku machine.config. 3. Zamapuj rozszerzenie pliku (* .arshad) na plik aspnet_isapi.dll w IIS.

Interfejs IHttpHandler ma metodę ProcessRequest i właściwość IsReusable, którą należy zaimplementować. ProcessRequest: W tej metodzie zapisujesz kod, który generuje dane wyjściowe dla procedury obsługi. IsResuable: Ta właściwość określa, czy ten program obsługi może zostać ponownie użyty, czy też nie.

można zarejestrować procedurę obsługi w pliku web.config jak ten

<httpHandlers> 
    <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" /> 
</httpHandlers> 

Uwaga: tutaj jesteśmy obsługi dowolną nazwę pliku z rozszerzeniem Arshad.

  1. Http Modules: HttpModule to procesor oparty na zdarzeniach do wstrzykiwania logiki przetwarzania wstępnego, zanim żądanie dotrze do serwera IIS. ASP.NET używa modułu HTTP do implementacji wielu własnych funkcji, takich jak uwierzytelnianie i autoryzacja, zarządzanie sesjami i buforowanie wyjściowe itp.

Silnik ASP.NET emituje wiele zdarzeń, gdy żądanie przechodzi przez potok żądania. Niektóre z tych zdarzeń to AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. Używając HttpModule, możesz pisać logikę w tych zdarzeniach. Logika ta jest wykonywana, gdy zdarzenia są uruchamiane i zanim żądanie osiągnie IIS.

Istnieją dwa etapy tworzenia modułów, 1. Wdrożenie modułu interfejsu IHttpModule 2. Rejestracja w pliku web.config lub machine.config

przykład: Bezpieczeństwo: Korzystanie z modułu HTTP, można wykonać niestandardowe uwierzytelnianie lub inne kontrole bezpieczeństwa, zanim zapytanie dotrze do IIS.

Powiązane problemy