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

Jad*_*ias 16 .net c# wcf persistence

我编写了一个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
}
Run Code Online (Sandbox Code Playgroud)

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

static void Main(string[] args)
{
    ServiceHost serviceHost =
       new ServiceHost(typeof(TimeSpanStorage));
    serviceHost.Open();
    Console.WriteLine("Service running.  Please 'Enter' to exit...");
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ttC 18

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

在您的实现上尝试添加

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Single)]
public class MyService: IService
Run Code Online (Sandbox Code Playgroud)

这使得服务基本上是单身.


And*_*are 8

您要做的是创建一个持久的服务:

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

  • 链接似乎不再指向原始文章 (2认同)