2009-08-16 21 views
1

J'ai une application HttpApplication (Global.asax) dans mon application web, je l'utilise pour attraper et enregistrer des exceptions non gérées et pour configurer WebFormURLRouting. Tout cela fonctionne, cependant je veux déplacer ce code dans mon cadre d'application, (pas dans Global.asax.cs)C# ASP.NET HttpModules: HttpApplication Events

Je viens d'essayer de créer une classe HttpApplication dans le cadre, mais il semble que je ne peux pas remplacer les événements ? Quoi qu'il en soit, je crois que je peux utiliser un HttpModule à la place pour consommer ces événements, à savoir:

1) Éliminer complètement le besoin de Global.asax?

2) Comment cet effet plus grande échelle, à savoir éventuellement d'exécuter l'application sur une batterie de serveurs Web

3) Je HttpHandlers pour gérer d'autres choses comme l'importation du fichier et le téléchargement de fichiers, est-il une limite au nombre de HttpModule/HttpHandlers devraient être utilisés ou devraient-ils être combinés en quelque sorte pour réduire les frais généraux?

Les commentaires appréciés

Répondre

3

En écoutant les événements que vous connaissez parmi Global.asax, dans un module HTTP, est aussi simple que brancher les événements de l'instance HttpApplication dans la méthode Init du module. Vous ne pouvez pas remplacer les méthodes de HttpApplication, vous devriez écouter ses événements.

Quant à vos questions: 1) Oui, dans plusieurs de mes projets web, nous n'utilisons Global.asax

2) Cela n'affecte pas vraiment mise à l'échelle. Pour chaque serveur Web de la batterie, vous devez connecter votre HTTPModule correctement. Mais puisque cela est fait dans web.config, il devrait déjà être là.

3) Réponse courte: Non. Pour httphandlers, ils sont sélectionnés et exécutés en fonction de l'extension du fichier de requête http entrant et/ou du chemin et de la méthode HTTP. Vous auriez vraiment besoin de beaucoup de ces avant que la sélection d'un gestionnaire spécifique devient un problème de performance. Pour HttpModules, vous avez la possibilité d'exécuter du code à chaque requête, et évidemment, si ce code prend du temps à s'exécuter, cela affectera les performances. Mais ce sera votre code qui prendra le temps, pas le fait qu'il soit exécuté via un module http.

1

Vous pouvez créer votre classe Application dans votre Framework et en hériter dans chaque application. Donc vous aurez toutes vos poignées dans le cadre.
Les réponses:

  1. Vous pouvez éviter d'utiliser la classe d'application, mais addign Handlers pour ce n'est pas une bonne idée.
  2. Le nombre de manipulateurs n'influence PAS la capacité d'escalade en général. MAIS IL AFFECTE LA MAINTENABILITÉ.
  3. Conserver le nombre de gestionnaires de petite taille en raison de # 2.