gpt4 book ai didi

c# - Web 服务中的数据持久性?

转载 作者:行者123 更新时间:2023-11-30 19:11:30 25 4
gpt4 key购买 nike

.NET 网络服务中的数据持久化解决方案是什么?

我有一个网络服务。我为我的网络服务提供了一个 ID,这个 ID 返回了正确的对象。

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

我不想使用数据库。我想将我的对象集合保存在“内存”中。所以我决定像这样在我的网络服务中创建一个简单的对象

    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;
}
}

它有效,但每次我调用我的 web 服务时都会调用构造函数,我想初始化此列表一次并稍后对其应用修改。我应该如何初始化我的列表并持久化它?

最佳答案

您可以使用静态集合:

private static List<MyObject> list = new List<MyObjec>();

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

private static ConcurrentBag<MyObject> list = new ConcurrentBag<MyObjec>();

当然,您应该清楚地知道,通过使用内存中结构来存储数据,您的数据生命基本上与 Web 应用程序的生命相关联。由于 IIS 可以随时回收应用程序域(一段时间不活动,达到某些 CPU/内存阈值),您存储在内存中的所有内容都将变为无效。

顺便说一下,如果你走那条路,请准备好这种情况经常发生,每次你重新编译你的网络服务,因为通过重新编译,你基本上是在修改 bin 文件夹中的程序集,网络服务器将简单地回收应用程序.

所以,是的,所有这些文字都是为了告诉您将数据保存在内存以外的其他地方:-)您有很多可能性,包括不同格式的文件、数据库、嵌入式数据库……

关于c# - Web 服务中的数据持久性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11230961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com