在 .NET Web 服务中保存数据的最佳方式

Posted

技术标签:

【中文标题】在 .NET Web 服务中保存数据的最佳方式【英文标题】:best way to persist data in .NET Web Service 【发布时间】:2010-09-05 22:06:29 【问题描述】:

我有一个从这个 json 文件查询数据的 Web 服务,但我不希望 Web 服务每次都访问该文件。我在想也许我可以将数据存储在其他地方(可能在内存中),这样 Web 服务下次尝试查询相同数据时就可以从那里获取数据。我有点明白需要做什么,但我只是不确定如何实际去做。我们如何在 Web 服务中持久化数据?

更新: 缓存和使用静态变量这两个建议看起来都不错。也许我应该同时使用两个,这样我就可以先看一个,如果它不在,使用第二个,如果它也不在那里,那么我将查看 json 文件。

【问题讨论】:

【参考方案1】:

扩展 Ice^^Heat 的想法,您可能需要考虑缓存的位置 - 或者将 json 文件的内容缓存到应用程序缓存中,如下所示:

Context.Cache.Insert("foo", _
                 Foo, _
                 Nothing, _
                 DateAdd(DateInterval.Minute, 30, Now()), _
                 System.Web.Caching.Cache.NoSlidingExpiration)

然后在每次点击时生成您需要的结果。或者,您可以在函数定义中缓存 Web 服务输出:

<WebMethod(CacheDuration:=60)> _
Public Function HelloWorld() As String
    Return "Hello World"
End Function

从XML Web Service Caching Strategies收集的信息。

【讨论】:

【参考方案2】:

如何使用全局或静态集合对象?这是个好主意吗?

【讨论】:

【参考方案3】:

ASP.NET 缓存同样适用于 Web 服务,因此您可以实现常规缓存,如下所述:http://msdn.microsoft.com/en-us/library/aa478965.aspx

【讨论】:

【参考方案4】:

为了回显klughing,如果您的 JSON 数据预计不会经常更改,我认为缓存它的最简单方法是使用某种静态集合 - 也许是 DataTable。

首先,将您的 JSON 数据解析为 System.Data.DataTable,并在您的 Web 服务类中将其设为静态。然后,访问静态对象。在 IIS 回收您的应用程序池之前,数据应保持缓存状态。

public class WebServiceClass

    private static DataTable _myData = null;
    public static DataTable MyData
    
        get
        
            if (_myData == null)
            
                _myData = ParseJsonDataReturnDT();
            
            return _myData;
        
    

    [WebMethod]
    public string GetData()
    
        //... do some stuff with MyData and return a string ...
        return MyData.Rows[0]["MyColumn"].ToString();
    

【讨论】:

以上是关于在 .NET Web 服务中保存数据的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

保存并在页面上显示员工信息的最佳方式?

在设备中保存凭据的最佳方法[关闭]

在 Java 应用程序中保存数据的最佳方式是啥?

在 iOS 设备中保存从 Web 下载的图像的最佳位置?

核心数据模型对象保存的最佳实践

SpriteKit - 组织保存的游戏数据的最佳方式是啥?