在.NET Web服务中持久保存数据的最佳方法

时间:2020-03-05 18:39:46  来源:igfitidea点击:

我有一个Web服务,可从此json文件查询数据,但我不希望Web服务每次都必须访问该文件。我在想,也许我可以将数据存储在其他地方(也许在内存中),以便Web服务在下次尝试查询相同数据时可以从那里获取数据。我有点理解需要做什么,但是我不确定如何实际执行。我们如何将数据持久保存在Web服务中?

更新:
缓存和使用静态变量这两个建议看起来都不错。也许我应该只使用两者,所以我可以先看一个,如果不在那儿,请使用第二个,如果不在那儿,那么我将看一下json文件。

解决方案

回答

ASP.NET缓存与Web服务同样有效,因此我们可以按以下说明实施常规缓存:http://msdn.microsoft.com/zh-cn/library/aa478965.aspx

回答

使用全局或者静态集合对象该怎么办?这是一个好主意吗?

回答

延续Ice ^^ Heat的想法,我们可能需要考虑在应用程序缓存中将json文件的内容缓存在何处,如下所示:

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

然后根据每次点击生成所需的结果。或者,我们可以将Webservice输出缓存在函数定义上:

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

从XML Web服务缓存策略中收集的信息。

回答

为了回想一下,如果不希望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();
    }
}