我编写了一个WCF服务,但是存储在服务实现中的数据在两次调用之间不会持久存在,即使存储在静态变量中也是如此。我能做什么?
服务实现如下:
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
}
服务主机是一个控制台应用程序:
static void Main(string[] args)
{
ServiceHost serviceHost =
new ServiceHost(typeof(TimeSpanStorage));
serviceHost.Open();
Console.WriteLine("Service running. Please 'Enter' to exit...");
Console.ReadLine();
}
发布于 2009-12-01 22:04:01
默认情况下,WCF instanceMode设置为Per call,这意味着服务中使用的数据特定于该方法调用的客户端。
在您的实现中,尝试添加
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Single)]
public class MyService: IService
这使得该服务本质上是单例的。
发布于 2010-12-13 16:56:10
添加:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
在您的类之上,您将拥有一个单实例的服务(即类属性保持不变),并允许多个并发连接。
现在你必须处理你的属性的读/写,也就是像你已经做的那样使用锁(或者其他一些技术)。
https://stackoverflow.com/questions/1826324
复制相似问题