2010-11-13 6 views
7

je faire face à une exigence,Comment définir une variable globale dans ASP.net application web

Je veux un accès client un centre de données, mais sans base de données d'utilisation, donc je veux que mon application Web peut conserver une session globale ou application variable, qui contient les données, chaque client peut accéder aux mêmes données ... Je suis essayer de déclarer dans golabl, mais il semble qu'il ne peut stocker que la chaîne, mais d'autres ...

comment résoudre ce problème?

merci.

+2

Faites-vous référence à une variable de session qui restera constante pendant la durée de la session ou à une variable qui sera partagée entre les clients (autres sessions)? – KennyH

+0

Pouvez-vous partager l'exemple avec lequel vous essayez de travailler? – jcolebrand

+0

Voir aussi http://stackoverflow.com/questions/20347280/thread-safe-global-variable-in-an-asp-net-mvc-application – Tony

Répondre

5

Pour partager les données avec tous les utilisateurs de l'application, vous pouvez utiliser l'objet application ASP.NET. Étant donné le code d'échantillon pour accéder à l'objet d'application dans ASP.NET:

Hashtable htblGlobalValues = null; 

if (Application["GlobalValueKey"] != null) 
{ 
    htblGlobalValues = Application["GlobalValueKey"] as Hashtable; 
} 
else 
{ 
    htblGlobalValues = new Hashtable(); 
} 

htblGlobalValues.Add("Key1", "Value1"); 
htblGlobalValues.Add("Key2", "Value2"); 

this.Application["GlobalValueKey"] = htblGlobalValues; 

Application["GlobalValueKey"] peut être utilisé partout dans l'ensemble de l'application par tout utilisateur. Il sera commun à tous les utilisateurs de l'application.

+3

Veuillez arrêter d'ajouter des blocs de signature à vos messages. Ils donnent l'impression que vous essayez de spammer votre site Web. Il y a un lien vers votre profil sur chaque message que vous publiez, qui sert de signature. Vous pouvez ajouter tout ce que vous aimez (dans des limites raisonnables) à votre page de profil. Ce serait l'endroit pour poster un lien vers votre blog, site web, projets secondaires, affaires, etc. –

+0

Très bien, merci – Sankalp

+0

Vous faites une recherche excessive à l'application – abatishchev

11

Une autre possibilité de définir une variable globale est en créant une classe statique avec une propriété statique:

public static class GlobalVariables 
{ 
    public static string MyGlobalVariable { get; set; } 
} 

vous pouvez le rendre plus complexe si vous allez utiliser ceci en tant que magasin de données, mais la même idée va. Dites, vous avez un dictionnaire pour stocker vos données globales, vous pouvez faire quelque chose comme ceci:

public static class GlobalData 
{ 
    private static readonly object _syncRoot = new object(); 
    private static Dictionary<string, int> _data; 

    public static int GetItemsByTag(string tag) 
    { 
     lock (_syncRoot) 
     { 
      if (_data == null) 
       _data = LoadItemsByTag(); 

      return _data[tag]; 
     } 
    } 

    private static Dictionary<string, int> LoadItemsByTag() 
    { 
     var result = new Dictionary<string, int>(); 

     // Load the data from e.g. an XML file into the result object. 

     return result; 
    } 
} 
+2

Les données statiques sont communes uniquement dans le pool, si certaines ont plusieurs pools alors ils sont différents. – Aristos

+0

@Aristos - Il est statique dans 'AppDomain'. Est-ce la même chose que dans la piscine? –

+1

@Pieter non statique est la même que dans la piscine. Si vous avez 2 pools alors vous avez 2 valeurs statiques différentes, et si un utilisateur, utilisez les deux pools c'est très possible, alors la valeur est différente. Faites des tests pour le voir par vous-même. (vous avez besoin d'iis6 +) – Aristos

0

Vous pouvez également utiliser Cache, ce qui présente des avantages tels que la possibilité de définir l'heure et la date d'expiration.

Questions connexes