在.NET Web Service中保留数据的最佳方法

时间:2008-08-14 23:13:32

标签: .net web-services json memory persistence

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

更新 这两个建议,缓存和使用静态变量,都很好看。也许我应该只使用两个,所以我可以先看一个,如果它不在那里,使用第二个,如果它不在那里,那么我会看看json文件。

4 个答案:

答案 0 :(得分:5)

扩展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收集的信息。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

ASP.NET缓存与Web服务一样,因此您可以按照此处的说明实现常规缓存:http://msdn.microsoft.com/en-us/library/aa478965.aspx

答案 3 :(得分:2)

要回显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();
    }
}