2010-09-01 8 views
0

J'ai besoin d'un stockage local HttpApplication. Je pensais que l'ApplicationState était l'endroit pour cela, mais apparemment cela peut être partagé entre les instances HttpApplication dans un Appdomain.Stockage local ASP.NET HttpApplication

public class MyHttpModule : IHttpModule 
    { 
     private object initializingLock = new object(); 

     private static HttpApplication last; 

     public void Init(HttpApplication context) 
     { 
      lock (initializingLock) 
      { 
       // always is false, as expected 
       if (last == context) 
       { 
       } 

       // is true for 2nd HttpApplication in AppDomain! 
       if (last != null && last.Application == context.Application)      
       {     
       } 

       last = context; 
      } 
     } 
    } 

Quelle est la meilleure Blace à utiliser pour stocker des données qui est par HttpApplication que d'autres choses peuvent accéder?

Répondre

0

Si vous codez pour particulier (ou contrôlé ensemble de) application web vous pouvez ajouter quelque état que vous avez besoin dans votre HttpApplication dans global.asax tels que

public class Global : System.Web.HttpApplication 
{ 
    string MyProperty { get; set;} 
    .... 

Ensuite, dans votre module, vous lancez HttpApplication to Global et accéder à l'état. Par exemple,

var myApp = context as Global; 
if (null != myApp) 
{ 
    var value = myApp.MyProperty; 
    ... 
} 
+0

-1 sans verrouillage –

+0

@John Saunders, je suis simplement ILLUSTRATION d'avoir l'état par objet HttpApplication. Le fait que le verrouillage soit nécessaire dépend de l'implémentation globale et du modèle d'utilisation. Je comprends que * une instance HttpApplication * servira * une requête à la fois * il est donc tout à fait possible d'utiliser des variables d'instance de l'objet HttpApplication sans verrouillage explicite si son utilisation est limitée dans une portée de requête. – VinayC

+0

Cela fonctionne, mais j'espérais quelque chose qui fonctionnera dans une DLL, où je ne contrôle pas le HttpApplication lui-même (et donc ne contrôle pas le global.asax, seulement mon HttpModule) ... – Jeff

Questions connexes