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

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

有帮助吗?

解决方案

延伸至 冰^^热的想法,您可能需要考虑在哪里缓存 - 要么将 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 服务缓存策略.

其他提示

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

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

回声 克鲁欣, ,如果您的 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();
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top