在.NET Web服务中持久化数据的最佳方法是什么?

5
我有一个Web服务,从这个JSON文件中查询数据,但我不希望Web服务每次都访问该文件。我在考虑,也许我可以将数据存储在其他地方(比如内存)中,这样Web服务下次尝试查询相同的数据时,只需从那里获取数据即可。我有点理解需要做什么,但我不确定如何实际操作。我们如何在Web服务中持久化数据?
更新: 缓存和使用静态变量的两个建议看起来都不错。也许我应该同时使用它们,这样我可以先查看一个,如果没有,再使用第二个,如果还没有,那么我就会查看JSON文件。
4个回答

6

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 Service缓存策略


3
如果您的JSON数据不经常更改,为了回应klughing,我认为最简单的缓存方法是使用某种静态集合,例如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();
    }
}

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

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接