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时都会调用构造函数,我想初始化这个列表一次并稍后对其进行修改.我该如何初始化我的列表并坚持下去?
您可以使用静态集合:
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服务器只是简单地回收应用程序.
所以,是的,所有这些文本墙告诉你在内存以外的其他地方保存你的数据:-)你有很多可能,包括不同格式的文件,数据库,嵌入式数据库,......
| 归档时间: |
|
| 查看次数: |
4583 次 |
| 最近记录: |