首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用内存中的持久存储来编写WCF服务?

如何使用内存中的持久存储来编写WCF服务?
EN

Stack Overflow用户
提问于 2009-12-01 21:53:08
回答 2查看 15.4K关注 0票数 17

我编写了一个WCF服务,但是存储在服务实现中的数据在两次调用之间不会持久存在,即使存储在静态变量中也是如此。我能做什么?

服务实现如下:

代码语言:javascript
复制
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
}

服务主机是一个控制台应用程序:

代码语言:javascript
复制
static void Main(string[] args)
{
    ServiceHost serviceHost =
       new ServiceHost(typeof(TimeSpanStorage));
    serviceHost.Open();
    Console.WriteLine("Service running.  Please 'Enter' to exit...");
    Console.ReadLine();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-01 22:04:01

默认情况下,WCF instanceMode设置为Per call,这意味着服务中使用的数据特定于该方法调用的客户端。

在您的实现中,尝试添加

代码语言:javascript
复制
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Single)]
public class MyService: IService

这使得该服务本质上是单例的。

票数 19
EN

Stack Overflow用户

发布于 2010-12-13 16:56:10

添加:

代码语言:javascript
复制
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

在您的类之上,您将拥有一个单实例的服务(即类属性保持不变),并允许多个并发连接。

现在你必须处理你的属性的读/写,也就是像你已经做的那样使用锁(或者其他一些技术)。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1826324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档