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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

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

服务实施如下:

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();
}
提问于
用户回答回答于

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

在你的实现尝试添加

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Single)]
public class MyService: IService

这使得该服务基本上是单身。

用户回答回答于

你想要做的是创建一个持久的服务

WCF持久服务是WCF服务,在这些服务中,操作可以记住在重新启动serivcehost和/或客户端之间的私有变量值(=服务的状态)。

扫码关注云+社区