2010-11-13 26 views
7

tengo frente a un requisito,Cómo definir una variable global en la aplicación web ASP.net

Quiero acceso de los clientes de un centro de datos de la base de datos pero sin uso, por lo que quiero mi aplicación web puede retener una sesión global o en la Solicitud variable, que contiene los datos, cada cliente puede acceder a los mismos datos ... Estoy tratando de declarar en golabl, pero parece que solo puede almacenar Cadena pero otros ...

cómo solucionar este problema?

gracias.

+2

¿Se refiere a una variable de sesión que se mantendrá constante a lo largo de la vida de la sesión o una variable que se compartirá entre los clientes (otras sesiones)? – KennyH

+0

¿Puedes compartir el ejemplo con el que intentas trabajar? – jcolebrand

+0

Vea también http://stackoverflow.com/questions/20347280/thread-safe-global-variable-in-an-asp-net-mvc-application – Tony

Respuesta

5

para compartir los datos con todos los usuarios de la aplicación, se puede utilizar el objeto de aplicación ASP.NET. Teniendo en cuenta es el código de ejemplo para acceder a objeto de aplicación en 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"] se puede utilizar en cualquier lugar de toda la aplicación por cualquier usuario. Será común para todos los usuarios de la aplicación.

+3

Deje de agregar bloques de firma a sus publicaciones. Hacen que parezca que estás tratando de enviar spam a tu sitio web. Hay un enlace a su perfil en cada publicación que hace, que actúa como su firma. Puede agregar lo que quiera (dentro de lo razonable) a su página de perfil. Ese sería el lugar para publicar un enlace a su blog, sitio web, proyectos paralelos, negocios, etc. –

+0

Muy bien, gracias – Sankalp

+0

Realice una búsqueda en exceso de la aplicación – abatishchev

11

Otro posibilidad de definir una variable global es mediante la creación de una clase estática con una propiedad estática:

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

puede que esto sea más compleja si se va a utilizar esto como un almacén de datos, pero la misma idea va. Por ejemplo, tiene un diccionario para almacenar sus datos globales, se podría hacer algo como esto:

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

Los datos estáticos son comunes solo dentro de la agrupación, si algunos tienen muchas agrupaciones entonces ellos son diferentes. – Aristos

+0

@Aristos - Está estático dentro del 'AppDomain'. ¿Es eso lo mismo que dentro del grupo? –

+1

@Pieter no la estática es lo mismo solo dentro de la piscina. Si tiene 2 grupos, entonces tiene 2 valores estáticos diferentes, y si es un usuario, use ambos grupos que es muy posible, entonces el valor es diferente. Haz algunas pruebas para verlo tú mismo. (necesitas iis6 +) – Aristos

0

También puede usar Cache, que tiene ventajas como la posibilidad de establecer la fecha y hora de caducidad.

Cuestiones relacionadas