我有一个从这个 json 文件查询数据的 Web 服务,但我不希望 Web 服务每次都访问该文件。我在想也许我可以将数据存储在其他地方(也许在内存中),这样 Web 服务下次尝试查询相同数据时就可以从那里获取数据。我有点明白需要做什么,但我只是不确定如何实际去做。我们如何在 Web 服务中持久化数据?
更新: 缓存和使用静态变量的建议看起来都不错。也许我应该同时使用两个,这样我就可以先看一个,如果它不在那里,使用第二个,如果它也不在那里,那么我会看看 json 文件。
我有一个从这个 json 文件查询数据的 Web 服务,但我不希望 Web 服务每次都访问该文件。我在想也许我可以将数据存储在其他地方(也许在内存中),这样 Web 服务下次尝试查询相同数据时就可以从那里获取数据。我有点明白需要做什么,但我只是不确定如何实际去做。我们如何在 Web 服务中持久化数据?
更新: 缓存和使用静态变量的建议看起来都不错。也许我应该同时使用两个,这样我就可以先看一个,如果它不在那里,使用第二个,如果它也不在那里,那么我会看看 json 文件。
扩展Ice^^Heat的想法,您可能需要考虑缓存的位置 - 或者将 json 文件的内容缓存在 Application 缓存中,如下所示:
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
使用全局或静态集合对象怎么样?这是一个好主意吗?
ASP.NET 缓存同样适用于 Web 服务,因此您可以按照此处的说明实现常规缓存:http: //msdn.microsoft.com/en-us/library/aa478965.aspx
为了回应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();
}
}