Web服务中的数据持久性?
.NET Web服务中数据持久性的解决方案是什么?
我有一个网络服务。 我给我的webservice一个id,这个返回正确的对象。
[OperationContract] [WebInvoke(Method = "GET", UriTemplate = "/GetMyObject?id={id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] MyObject GetMyObject(string id);
我不想使用数据库。 我想将我的对象集合保存在“内存”中。 所以我决定在我的webservice中创建一个简单的对象
public class Service : IService { List list = new List(); 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; } }
它工作,但每次调用我的webservice时都会调用构造函数,我想初始化此列表一次并稍后对其进行修改。 我该如何初始化我的列表并坚持下去?
您可以使用静态集合:
private static List list = new List();
当然,由于这是一个multithreading应用程序,您可能可以同时访问此集合,因此必须确保同步对该集合的访问。 或者,如果您使用的是.NET 4.0,只需使用线程安全的ConcurrentBag
:
private static ConcurrentBag list = new ConcurrentBag();
当然,您应该完全清楚,通过使用内存结构来存储数据,您的数据生命基本上与Web应用程序的生命周期紧密相关。 而且由于IIS可以随时回收应用程序域(一段时间不活动,达到某些CPU /内存阈值),所有存储在内存中的内容都会进入虚空状态。
顺便说一下,如果你走这条路,每次重新编译你的web服务时都要经常做好准备,因为重新编译你基本上是在bin文件夹中修改程序集,而web服务器只是简单地回收应用程序。
所以是的,所有这些文本墙告诉你在内存以外的地方保存你的数据:-)你有很多可能,包括不同格式的文件,数据库,嵌入式数据库,……
或者,您可以使您的服务成为单身人士
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)] class Service ...
但是,这种方法将来会导致巨大的问题。 不要在内存中存储任何内容。 如果这样做,则将状态嵌入到应用程序中。 这导致实现高可靠性和可扩展性所需的大量工作。 没有状态,没有痛苦。
WCF内置了实例管理 。
上述就是C#学习教程:Web服务中的数据持久性?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1001444.html