Web服务中的数据持续存在?

Bas*_*mme 2 .net c# web-services

.NET Web服务中数据持久性的解决方案是什么?

我有一个网络服务.我给我的webservice一个id,这个返回正确的objet.

        [OperationContract]
        [WebInvoke(Method = "GET", UriTemplate = "/GetMyObject?id={id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        MyObject GetMyObject(string id);
Run Code Online (Sandbox Code Playgroud)

我不想使用数据库.我想把我的对象集合保存在"记忆"中.所以我决定在我的webservice中创建一个简单的对象

    public class Service : IService
    {
        List<MyObject> list = new List<MyObjec>();

        public Service()
        {
            list.Add(new MyObject() { Id = 1, Data = ...} );
            list.Add(new MyObject() { Id = 2, Data = ...} );
            list.Add(new MyObject() { Id = 3, Data = ...} );
            list.Add(new MyObject() { Id = 4, Data = ...} )
            ...
        }

        public MyObject GetMyObject(string id)
        {
            // code to get my object from the list
            return myObject;
        }
}
Run Code Online (Sandbox Code Playgroud)

它工作,但每次调用我的webservice时都会调用构造函数,我想初始化这个列表一次并稍后对其进行修改.我该如何初始化我的列表并坚持下去?

Dar*_*rov 8

您可以使用静态集合:

private static List<MyObject> list = new List<MyObjec>();
Run Code Online (Sandbox Code Playgroud)

当然,由于这是一个多线程应用程序,您可能可以同时访问此集合,因此必须确保同步对该集合的访问.或者,如果您使用的是.NET 4.0,只需使用线程安全ConcurrentBag<T>:

private static ConcurrentBag<MyObject> list = new ConcurrentBag<MyObjec>();
Run Code Online (Sandbox Code Playgroud)

当然,您应该完全清楚,通过使用内存结构来存储数据,您的数据生命基本上与Web应用程序的生命周期紧密相关.而且,由于IIS可以随时回收应用程序域(一段时间不活动,达到某些CPU /内存阈值),所以存储到内存中的所有内容都会进入虚空状态.

顺便说一句,如果你走这条路,每次重新编译你的web服务时都要经常做好准备,因为重新编译你基本上是在bin文件夹中修改程序集,而web服务器只是简单地回收应用程序.

所以,是的,所有这些文本墙告诉你在内存以外的其他地方保存你的数据:-)你有很多可能,包括不同格式的文件,数据库,嵌入式数据库,......