IHttpHandler vs IHttpModule



мой вопрос прост (хотя ответ, скорее всего, не будет): я пытаюсь решить, как реализовать обработчик загрузки на стороне сервера в C# / ASP.NET.



Я использовал как HttpModules (интерфейс IHttpModule), так и HttpHandlers (интерфейс IHttpHandler), и мне кажется, что я мог бы реализовать это с помощью любого механизма. Мне также приходит в голову, что я не понимаю различий между ними.



Итак, мой вопрос таков:в каких случаях будет Я решил использовать IHttpHandler вместо IHttpModule (и наоборот)?



выполняется ли он намного выше в конвейере? Это намного проще настроить в определенных ситуациях? Разве один не работает хорошо со средней безопасностью?

753   5  

5 ответов:

An ASP.NET обработчик HTTP - это процесс (часто называемый "конечная точка"), который выполняется в ответ на запрос, сделанный ASP.NET веб-приложение. Наиболее распространенным обработчиком является ASP.NET обработчик страниц, который обрабатывает .aspx-файлов. Когда пользователи запрашивают .aspx-файл, запрос обрабатывается страницей через обработчик страниц. Вы можете создать свои собственные обработчики HTTP, которые отображают пользовательские выходные данные в браузере.

типичное использование пользовательских обработчиков HTTP включает в себя следующее:

  • RSS-каналы для создания RSS-канала для веб-сайта можно создать обработчик, который выдает XML в формате RSS. Затем можно привязать расширение имени файла, например .rss для пользовательского обработчика. Когда пользователи отправляют запрос на ваш сайт, который заканчивается .rss, ASP.NET вызывает обработчик для обработки запроса.
  • Image server если вы хотите, чтобы веб-приложение обслуживало изображения различных размеров, вы можете написать пользовательский обработчик для изменения размера изображений, а затем отправить их пользователю в качестве ответа обработчика.

An HTTP модуль - это сборка, которая вызывается при каждом запросе, выполненном в приложении. Модули HTTP вызываются как часть ASP.NET конвейер запросов и иметь доступ к событиям жизненного цикла на протяжении всего запроса. Модули HTTP позволяют проверять входящие и исходящие запросы и принимать меры на основе запроса.

типичные области применения для HTTP-модули включают следующее:

  • безопасность поскольку вы можете проверять входящие запросы, модуль HTTP может выполнять пользовательскую проверку подлинности или другие проверки безопасности перед вызовом запрошенной страницы, веб-службы XML или обработчика. В службах IIS 7.0, работающих в интегрированном режиме, можно расширить проверку подлинности с помощью форм для всех типов контента в приложении.
  • статистика и ведение журнала поскольку HTTP модули вызываются по каждому запросу, вы можете собрать запрос статистика и информация журнала в централизованном модуле, а не на отдельных страницах.
  • пользовательские верхние и нижние колонтитулы поскольку вы можете изменить исходящий ответ, вы можете вставлять содержимое, такое как информация пользовательского заголовка, в каждую страницу или ответ веб-службы XML.

от:http://msdn.microsoft.com/en-us/library/bb398986.aspx

Как заявил здесь, HttpModules-это простые классы, которые могут подключаться к конвейеру обработки запросов, в то время как HttpHandlers отличаются от HttpModules не только из-за их позиций в конвейере обработки запросов, но и потому, что они должны быть сопоставлены с определенными расширениями файлов.

IHttpModule дает вам гораздо больше контроля, вы можете в основном управлением все трафика, направленного в веб-приложение. IHttpHandler дает вам меньше контроля (трафик фильтруется до он достигает вашего обработчика), но если этого достаточно для ваших нужд, то я не вижу причин использовать IHttpModule.

в любом случае, вероятно, лучше всего иметь свою пользовательскую логику в отдельном классе, а затем просто использовать этот класс из любого IHttpModule или IHttpHandler. Именно такой образ вам не придется беспокоиться о выборе одного или другого. Фактически, вы можете создать дополнительный класс, который реализует иIHttpHandler и IHttpModule а затем решить, что использовать, установив его в Web.config.

модули предназначены для обработки событий, вызванных приложением до и после того, как запрос на самом деле обрабатывается обработчиком. Обработчики, с другой стороны, не имеют возможности подписаться на какие-либо события приложения и вместо этого просто вызывают свой метод ProcessRequest для "основной" работы по обработке конкретного запроса.

взгляните на эту документацию от Microsoft (примерно на полпути вниз по странице в "запрос обрабатывается Участок трубопровода класса HttpApplication"):

http://msdn.microsoft.com/en-us/library/bb470252.aspx

вы можете увидеть в шаге 15, где обработчик получает свой шанс выполнить. Все события до и после этого шага доступны для перехвата модулями, но не обработчиками.

в зависимости от того, какие конкретные функции вы пытаетесь достичь, вы можете использовать либо обработчик, либо модуль для реализации обработчика загрузки. Вы даже можете в конечном итоге использовать оба.

что-то рассмотреть можно использовать обработчик загрузки, который уже написан.

вот бесплатный и с открытым исходным кодом:

http://www.brettle.com/neatupload

вот один коммерческий:

http://krystalware.com/Products/SlickUpload/

Если вы посмотрите документацию для NeatUpload, вы увидите, что он требует от вас настройки модуля.

15 секунд имеет хороший маленький учебник даю практический пример

Comments

    Ничего не найдено.