我有一个web应用程序,它拉取一个数据表并显示结果。由于业务的性质,所有的业务规则都包含在web应用程序必须从中提取的dlls中。因为有多个站点,并且我们不想在部署的许多应用程序中都包含核心dll,所以我们将对核心dll的任何调用合并到一个we服务中。当核心dll被更新,只需要推送一个新的应用程序(即web服务)时,这会有所帮助。
有了这个架构,我发现任何登录到任何web应用程序的人都会导致对数据库的多次调用,以便获得一个随后被解析的数据表。有问题的数据表变化很慢,我只需要刷新它,可能每4-6个小时一次。
当用户想要查看同一个datatable的不同视图时,我很熟悉在session中存储这样的内容。然而,webservice会话并不真正适用。在we服务中缓存datatable的好方法是什么,这样我们就不会重复昂贵地访问数据库。
webservice和应用程序都在C#和ASP.NET 2.0中,我们使用的是VS2005。
发布于 2009-01-23 15:21:49
作为一种非常便宜的方式(但它确实存在),您可以使用WebMethod代理的CacheDuration属性,该属性将缓存web方法调用的结果。更多信息请访问:
这可能会有帮助,只是一个想法...
发布于 2008-12-30 09:36:17
发布于 2008-12-30 09:49:45
便宜的选项#1:将数据表创建为web服务类的本地静态变量。在类的静态构造函数中填充datatable对象。当第一次查询服务以及回收任何应用程序工作进程时,datatable对象将可用于您的webmethod。
//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缓存(System.Web.Caching.Cache)。加载过程与上面相同,但存储方式不同。
https://stackoverflow.com/questions/400926
复制相似问题