80 votes

IHttpHandler vs IHttpModule

Ma question est simple (même si la réponse ne sera probablement pas): je suis en train de décider comment mettre en œuvre un serveur side télécharger gestionnaire en C# / ASP.NET.

J'ai utilisé à la fois HttpModules (IHttpModule interface) et HttpHandlers (interface IHttpHandler) et il me semble que je pourrais mettre en œuvre ce soit en utilisant le mécanisme. Il se produit également pour moi que je ne comprends pas les différences entre les deux.

Donc ma question est: Dans quel cas choisir le IHttpHandler au lieu de IHttpModule (et vice/versa)?

Est exécuté beaucoup plus élevé dans le pipeline? Est beaucoup plus facile à configurer que dans certaines situations? Ne peut-on pas bien travailler avec des moyennes de sécurité?

69voto

Ramani Sandeep Points 430

Un ASP.NET gestionnaire HTTP est le processus (souvent appelé le "point final") qui s'exécute en réponse à une demande faite à un ASP.NET application Web. La plus courante est un gestionnaire d'ASP.NET page gestionnaire de processus .fichiers aspx. Lorsque les utilisateurs demandent une .fichier aspx, la demande est traitée par la page par le biais de la page gestionnaire. Vous pouvez créer vos propres gestionnaires HTTP rendu de sortie personnalisé pour le navigateur.

Un module HTTP est une assemblée qui est appelé à chaque demande qui est faite à votre demande. HTTP modules sont appelés dans le cadre de la ASP.NET pipeline de demande et d'avoir accès à du cycle de vie des événements tout au long de la demande. HTTP modules vous permettent d'examiner les demandes entrantes et sortantes et de prendre des mesures en fonction de la demande.

Les utilisations typiques pour HTTP personnalisé gestionnaires sont les suivants:

  • Flux RSS Pour créer un flux RSS pour un site Web, vous pouvez créer un gestionnaire qui émet de la RSS format XML. Vous pouvez ensuite lier une extension de nom de fichier comme .flux rss pour le gestionnaire personnalisé. Lorsque les utilisateurs envoient une demande à votre site qui se termine en .rss, ASP.NET les appels de votre gestionnaire de traiter la demande.
  • Serveur d'Image Si vous voulez une application Web pour servir des images dans une variété de tailles, vous pouvez écrire un gestionnaire personnalisé pour redimensionner les images et de les envoyer ensuite à l'utilisateur en tant que gestionnaire de la réponse.

Les utilisations typiques pour HTTP modules sont les suivants:

  • La sécurité, Parce que vous pouvez examiner les demandes entrantes, un module HTTP pouvez effectuer une authentification personnalisée ou d'autres contrôles de sécurité avant de la page demandée, XML, Web service, ou le gestionnaire est appelé. Dans Internet Information Services (IIS) 7.0 en mode Intégré, vous pouvez prolonger l'authentification par formulaires pour tous les types de contenu dans une application.
  • De la statistique et de l'enregistrement Car HTTP modules sont appelés à chaque requête, vous pouvez recueillir des statistiques sur les demandes et les informations de journal dans un module centralisé, plutôt que dans des pages individuelles.
  • Personnalisé des en-têtes ou pieds de page, Car vous pouvez modifier le sortant de réponse, vous pouvez insérer du contenu, telles que les informations d'en-tête de chaque page ou de service Web XML de réponse.

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

16voto

Kirtan Points 11022

Comme indiqué ici, HttpModules sont de simples classes qui peuvent se brancher dans le pipeline de traitement de demande, alors que HttpHandlers diffèrent de HttpModules non seulement en raison de leurs positions dans le pipeline de traitement de demande, mais aussi parce qu'ils doivent être mappées à une des extensions de fichiers spécifiques.

15voto

Igor Brejc Points 9752

IHttpModule vous donne beaucoup plus de contrôle, vous pouvez contrôler tout le trafic dirigé vers votre application Web. IHttpHandler vous donne moins de contrôle (le trafic est filtré avant qu'ils n'atteignent votre gestionnaire), mais si c'est suffisant pour vos besoins, alors je ne vois pas de raison d'utiliser l' IHttpModule.

De toute façon, il est probablement mieux d'avoir votre logique personnalisée dans une catégorie distincte, et alors il suffit d'utiliser cette classe soit à partir d' IHttpModule ou IHttpHandler. De cette façon, vous n'avez pas vraiment à vous soucier de choisir l'une ou l'autre. En fait, vous pouvez créer une classe supplémentaire qui implémente les deux IHttpHandler et IHttpModule et de décider ensuite que l'utilisation par la valeur en Web.config.

5voto

Jason Diamond Points 690

Les Modules sont conçus pour gérer les événements soulevées par l'application avant et après la demande est traitée par le gestionnaire. Les gestionnaires, d'autre part, ne bénéficient pas de la possibilité de souscrire à des événements d'application et, au lieu de cela, tout simplement obtenir leurs méthode ProcessRequest invoqué, afin de la "principale" travaux de traitement d'une demande spécifique.

Jetez un oeil à cette documentation de Microsoft (environ à mi-chemin en bas de la page dans le "La demande est traitée par le HttpApplication pipeline"):

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

Vous pouvez le voir dans l'étape 15, où le gestionnaire obtient sa chance à exécuter. Tous les événements avant et après cette étape sont disponibles pour l'interception par des modules, mais pas des gestionnaires.

En fonction de quelles fonctionnalités spécifiques que vous voulez réaliser, vous pouvez utiliser un gestionnaire ou un module pour mettre en œuvre un gestionnaire de téléchargement. Vous pourriez même finir en utilisant à la fois.

Quelque chose à prendre en considération peuvent utiliser un gestionnaire de téléchargement qui est déjà écrit.

Voici un logiciel gratuit et open source:

http://www.brettle.com/neatupload

Voici un commercial:

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

Si vous regardez la documentation de NeatUpload, vous verrez qu'il vous oblige à configurer un module.

5voto

YordanGeorgiev Points 1222

15 secondes a un joli petit tutoriel en lui donnant des exemple

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X