我有一个Web应用程序,可以提取数据并显示结果。由于业务的性质,所有业务规则都包含在Web应用程序必须从中获取的dll中。因为有多个站点,并且我们不希望在所有部署的应用程序中包含核心dll,所以我们将对核心dll的任何调用合并到Web服务中。这有助于在更新核心dll时仅需要推送一个新应用程序(即Web服务)。
通过这个架构,我发现任何登录任何Web应用程序的人都会导致多次调用数据库,以便获取一个然后被解析的数据表。有问题的数据表变化缓慢,我只需要每4-6小时更新一次。
当用户想要查看同一数据表的不同视图时,我熟悉在会话中存储这样的内容。但是,webservice会话并不真正适用。在Web服务中缓存数据表的好方法是什么,这样我们就不会重复进行数据库的昂贵访问。
Web服务和应用程序都在C#和ASP.NET 2.0中,我们正在使用VS2005。
答案 0 :(得分:3)
作为一种非常便宜的方式(但它存在),您可以使用WebMethod到达的CacheDuration属性,它将缓存Web方法调用的结果。更多信息:
CacheDuration property
这可能有所帮助,只是一个想法......
答案 1 :(得分:1)
答案 2 :(得分:1)
便宜的选项#1 :将数据表创建为Web服务类的本地静态变量。将静态构造函数中的datatable对象填充到类中。首次查询服务时,您的webmethod可以使用datatable对象,以及任何app worker进程回收。
//pseudo-code
class MyWebMethods {
private static DataTable localDataTable;
static MyWebMethods() {
localDataTable = new DataTable();
//Do whatever else is needed here to populate the table
}
[WebMethod]
public string GetSomeData(int id) {
//Query localDataTable using parameter info
//return result
}
}
便宜的选项#2 :类似的方法,考虑ASP.Net Cache(System.Web.Caching.Cache)。与上面相同的加载过程,但存储不同。