IHttpHandler vs IHttpModule
мой вопрос прост (хотя ответ, скорее всего, не будет): я пытаюсь решить, как реализовать обработчик загрузки на стороне сервера в C# / ASP.NET.
Я использовал как HttpModules (интерфейс IHttpModule), так и HttpHandlers (интерфейс IHttpHandler), и мне кажется, что я мог бы реализовать это с помощью любого механизма. Мне также приходит в голову, что я не понимаю различий между ними.
Итак, мой вопрос таков:в каких случаях будет Я решил использовать IHttpHandler вместо IHttpModule (и наоборот)?
выполняется ли он намного выше в конвейере? Это намного проще настроить в определенных ситуациях? Разве один не работает хорошо со средней безопасностью?
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.
Как заявил здесь, 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