2011-02-13 19 views
8

Tengo algunos servicios WCF. Estos servicios se ejecutan en ASP.NET. Quiero que estos servicios puedan acceder a una variable estática. Mi problema es que no estoy seguro de dónde está el mecanismo de almacenamiento de nivel de servidor apropiado. No quiero usar la base de datos debido a la velocidad. Pero, quiero que las variables estáticas permanezcan en la memoria el mayor tiempo posible. De hecho, me gustaría que permanezca hasta que reinicie mi servidor si es posible.Variables estáticas en WCF

¿Alguien me puede dar alguna idea?

Respuesta

14

Puede usar variables estáticas en WCF, pero debe sincronizar correctamente el acceso a ellas, ya que se puede acceder a ellas desde varios subprocesos al mismo tiempo. Los valores almacenados en variables estáticas son accesibles desde cualquier lugar en AppDomain y permanecen en la memoria hasta que se reinicie el servidor.

+0

¿Pero cómo puedo guardarlos en el Dominio de la aplicación? – user609886

+1

Crea una variable estática en alguna clase y accede a ella desde su servicio. –

4

Usted podría tener algo como esto

public static class StaticVariables 
{ 
    private static string _variable1Key = "variable1"; 

    public static Object Variable1 
    { 
     get 
     { 
      return Application[_variable1Key]; 
     } 

     set 
     { 
      Application[_variable1Key] = value; 
     } 
    } 
} 

La colección Application sí es seguro para subprocesos, pero las cosas se agrega a ella podría no ser; Así que tenlo en mente.

+0

¿Cómo obtengo acceso a la variable "Aplicación"? No lo veo en Intellisense. – user609886

+0

Este enlace debería ser útil http://msdn.microsoft.com/en-us/library/94xkskdf(v=VS.85).aspx –

+1

Sería bueno ver espacios de nombres incluidos cuando se habla de objetos .NET como aplicación porque hay varios espacios de nombres y para algunas personas eso se vuelve confuso. – tatmanblue

0

Si todos los servicios están en un solo ServiceContract y si todas las variables miembro en su servicio se pueden compartir entre todas las sesiones, entonces se podría establecer el ServiceBehavior tener un single instance.

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class MyService : IMyServiceContract 
{ 
}