2010-06-25 3 views
3

J'écris un module HTTP asp.net qui doit lire les données de configuration une fois à partir d'un fichier local (disons config.xml stocké dans le répertoire racine de l'application), puis basé sur la configuration effectuer un traitement sur les demandes entrantes.Comment gérer l'événement de démarrage d'application dans le module ASP.NET

Puisqu'il n'y a pas d'accrochage Application_Start/Application_init disponible dans les modules Asp.NET, quelle serait la meilleure façon de gérer le scénario. J'essaie d'éviter de lire le fichier de configuration chaque fois qu'une demande arrive. Idéalement, je veux lire le fichier de configuration lorsque l'application démarre.

J'ai besoin de coder ce module http seulement et ne veulent pas utiliser Global.asax

+0

Pourquoi n'utilisez-vous pas de variables statiques pour cela? Des moyens statiques pour toutes les sessions. –

+0

Les objets de classe statique sont initialisés uniquement lors du premier accès, et non lors du démarrage du pool d'applications IIS. Le gestionnaire Application_Start est préférable si l'initialisation doit être immédiate au démarrage. – spoulson

Répondre

0

variable statique a fait l'affaire. voici le code si quelqu'un est intéressé -

static string test; 
     public void Init(HttpApplication application) 
     { 


      application.BeginRequest +=(new EventHandler(this.Application_BeginRequest)); 
      test = "hi"; 
      application.EndRequest +=(new EventHandler(this.Application_EndRequest)); 


     } 
     private void Application_BeginRequest(Object source,EventArgs e) 
     { 
      { 
       HttpApplication application = (HttpApplication)source ; 
       HttpContext context = application.Context; 
       context.Response.Write(test); 
      } 


     } 
0

Je ne sais pas si cela fonctionnerait, mais vous pourriez être en mesure de mettre en œuvre ce dans init method de module.

+0

Je viens de l'essayer. Il semble que les variables/objets etc. de la méthode Init ne sont pas disponibles dans les événements "hookable" du HTTPmodule comme Application_BeginRequest etc. – gauravphoenix

0

Dans la méthode init de votre httpmodule, vous pouvez vous connecter à l'événement dans le contexte.

Par exemple:

public void Init(HttpApplication context) 
    { 

     context.PostRequestHandlerExecute += (sender, e) => 
     { 
      Page p = context.Context.Handler as Page; 
      if (p != null) 
      { 
      ///Code here  
      } 
     }; 
    } 
+0

vient de remarquer qu'il n'y a pas d'événement de démarrage à accrocher, pourquoi ne pas peupler les données dans la méthode init de votre module http. .. –

0
public SomeHttpModule : IHttpModule 
{  
    private static readonly Configuration Configuration = 
      ConigurationReader.Read();  
} 
1

Je vais pour un bien simple, quelque chose comme ça ...

public MyConfig Config 
{ 
    get 
    { 
     MyConfig _config = Application["MyConfig"] as MyConfig; 
     if (_config == null) 
     { 
      _config = new MyConfig(...); 
      Application["MyConfig"] = _config; 
     } 
     return _config; 
    } 
} 

cette façon, vous accédez à juste ce que vous avez besoin de configuration via le propriété ...

int someValue = Config.SomeValue; 

et il est chargé dans l'objet de l'application si elle n'a pas déjà été

Si vous avez besoin de la configuration par utilisateur plutôt que globalement, utilisez simplement Session["MyConfig"] au lieu de Application["MyConfig"]

Questions connexes