Moje pytanie jest proste (chociaż odpowiedź najprawdopodobniej nie będzie): próbuję zdecydować, jak zaimplementować program obsługi przesyłania po stronie serwera w C # / ASP.NET.
Użyłem zarówno HttpModules (interfejs IHttpModule), jak i HttpHandlers (interfejs IHttpHandler) i wydaje mi się, że mógłbym to zaimplementować za pomocą dowolnego mechanizmu. Wydaje mi się również, że nie rozumiem różnic między nimi.
Moje pytanie brzmi więc: w jakich przypadkach wybrałbym używanie IHttpHandler zamiast IHttpModule (i odwrotnie)?
Czy jest wykonywany znacznie wyżej w rurociągu? Czy jest dużo łatwiejszy do skonfigurowania w określonych sytuacjach? Czy nie działa dobrze ze średnim zabezpieczeniem?
c#
asp.net
iis
httphandler
httpmodule
Dan Esparza
źródło
źródło
Odpowiedzi:
Procedura obsługi HTTP ASP.NET to proces (często nazywany „punktem końcowym”), który jest uruchamiany w odpowiedzi na żądanie skierowane do aplikacji sieci Web ASP.NET. Najpopularniejszym programem obsługi jest program obsługi stron ASP.NET, który przetwarza pliki aspx. Gdy użytkownicy żądają pliku aspx, żądanie jest przetwarzane przez stronę za pośrednictwem programu obsługi strony. Możesz utworzyć własne programy obsługi HTTP, które wyświetlają niestandardowe dane wyjściowe w przeglądarce.
Typowe zastosowania niestandardowych programów obsługi HTTP obejmują:
HTTP moduł jest zespół, który nazywa się na każde żądanie, który jest wykonany do aplikacji. Moduły HTTP są wywoływane jako część potoku żądań ASP.NET i mają dostęp do zdarzeń cyklu życia w całym żądaniu. Moduły HTTP umożliwiają badanie żądań przychodzących i wychodzących oraz podejmowanie działań na podstawie żądania.
Typowe zastosowania modułów HTTP obejmują:
Od: http://msdn.microsoft.com/en-us/library/bb398986.aspx
źródło
Jak wspomniano tutaj , HttpModules to proste klasy, które mogą się podłączyć do potoku przetwarzania żądań, podczas gdy HttpHandlers różnią się od HttpModules nie tylko ze względu na ich pozycje w potoku przetwarzania żądań, ale także dlatego, że muszą być mapowane na określone rozszerzenia plików.
źródło
IHttpModule
daje znacznie większą kontrolę, możesz w zasadzie kontrolować cały ruch kierowany do Twojej aplikacji internetowej.IHttpHandler
daje ci mniejszą kontrolę (ruch jest filtrowany, zanim dotrze do twojego programu obsługi), ale jeśli jest to wystarczające dla twoich potrzeb, nie widzę powodu, aby używaćIHttpModule
.W każdym razie prawdopodobnie najlepiej jest mieć własną logikę w osobnej klasie, a następnie po prostu użyć tej klasy z jednego
IHttpModule
lubIHttpHandler
. W ten sposób nie musisz się martwić o wybór jednego lub drugiego. W rzeczywistości, można utworzyć dodatkowe klasy, która implementuje zarównoIHttpHandler
aIHttpModule
, a następnie zdecydować, co do wykorzystania przez ustawienie go wWeb.config
.źródło
Moduły są przeznaczone do obsługi zdarzeń wywoływanych przez aplikację przed i po przetworzeniu żądania przez program obsługi. Z drugiej strony programy obsługujące nie mają możliwości subskrybowania żadnych zdarzeń aplikacji, a zamiast tego po prostu wywołują metodę ProcessRequest w celu wykonania „głównej” pracy polegającej na przetwarzaniu określonego żądania.
Zapoznaj się z dokumentacją firmy Microsoft (mniej więcej w połowie strony w sekcji „Żądanie jest przetwarzane przez potok HttpApplication”):
http://msdn.microsoft.com/en-us/library/bb470252.aspx
W kroku 15 możesz zobaczyć, gdzie program obsługi ma szansę wykonać. Wszystkie zdarzenia przed i po tym kroku są dostępne do przechwycenia przez moduły, ale nie do obsługi.
W zależności od konkretnych funkcji, które próbujesz osiągnąć, możesz użyć modułu obsługi lub modułu do zaimplementowania modułu obsługi przesyłania. Możesz nawet skończyć używając obu.
Warto rozważyć użycie już napisanej procedury obsługi przesyłania.
Oto darmowy i open source:
http://www.brettle.com/neatupload
Oto komercyjny:
http://krystalware.com/Products/SlickUpload/
Jeśli spojrzysz na dokumentację NeatUpload, zobaczysz, że wymaga ona skonfigurowania modułu.
źródło
15 sekund ma ładny mały samouczek z praktycznym przykładem
źródło