Escribí un servicio WCF, pero los datos almacenados en la implementación del servicio no persisten entre llamadas, ni siquiera si están almacenados en una variable estática. ¿Que puedo hacer?Cómo escribir un servicio WCF con almacenamiento persistente en memoria?
La implementación del servicio es la siguiente:
public class Storage : IStorage
{
protected static object[] _data;
#region IStorage Members
public void Insert(object[] data)
{
lock (_data)
{
_data = _data.Concat(data).ToArray();
}
}
public object[] SelectAll()
{
lock (_data)
{
return (object[])_data.Clone();
}
}
#endregion
}
El host de servicio es una aplicación de consola:
static void Main(string[] args)
{
ServiceHost serviceHost =
new ServiceHost(typeof(TimeSpanStorage));
serviceHost.Open();
Console.WriteLine("Service running. Please 'Enter' to exit...");
Console.ReadLine();
}
Establecer el modo de contexto como 'Único 'no es necesariamente lo correcto, eso no permitirá el estado por transacción. Usar una 'DurableOperation' es una opción mucho mejor. –
Acepto que no permitirá el control transaccional de un servicio duradero. Y el patrón de singleton tiene sus límites cuando quieres escalar. La "información ... no persiste entre llamadas" me hizo pensar que el OP estaba buscando algo simple. – MattC
Configurar InstanceContextMode en Single es una idea horrible: su clase de servicio WCF ahora es un singleton, y ha serializado el manejo de todas sus solicitudes (eliminando cualquier rendimiento), o necesita lidiar con problemas de subprocesamiento múltiple (difícil y propenso a errores) La mejor opción son los servicios duraderos, que realmente simplemente almacenan su estado en una tienda persistente (por ejemplo, una base de datos). –