首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重用/缓存web服务中的数据表

重用/缓存web服务中的数据表
EN

Stack Overflow用户
提问于 2008-12-30 17:28:54
回答 3查看 3.5K关注 0票数 3

我有一个web应用程序,它拉取一个数据表并显示结果。由于业务的性质,所有的业务规则都包含在web应用程序必须从中提取的dlls中。因为有多个站点,并且我们不想在部署的许多应用程序中都包含核心dll,所以我们将对核心dll的任何调用合并到一个we服务中。当核心dll被更新,只需要推送一个新的应用程序(即web服务)时,这会有所帮助。

有了这个架构,我发现任何登录到任何web应用程序的人都会导致对数据库的多次调用,以便获得一个随后被解析的数据表。有问题的数据表变化很慢,我只需要刷新它,可能每4-6个小时一次。

当用户想要查看同一个datatable的不同视图时,我很熟悉在session中存储这样的内容。然而,webservice会话并不真正适用。在we服务中缓存datatable的好方法是什么,这样我们就不会重复昂贵地访问数据库。

webservice和应用程序都在C#和ASP.NET 2.0中,我们使用的是VS2005。

EN

回答 3

Stack Overflow用户

发布于 2009-01-23 23:21:49

作为一种非常便宜的方式(但它确实存在),您可以使用WebMethod代理的CacheDuration属性,该属性将缓存web方法调用的结果。更多信息请访问:

CacheDuration property

这可能会有帮助,只是一个想法...

票数 3
EN

Stack Overflow用户

发布于 2008-12-30 17:36:17

您可以使用memcached在内存中存储任意时间的任何数据。它可以在Linux和Windows上运行,他们也有几个使用C#的api实现。

票数 1
EN

Stack Overflow用户

发布于 2008-12-30 17:49:45

便宜的选项#1:将数据表创建为web服务类的本地静态变量。在类的静态构造函数中填充datatable对象。当第一次查询服务以及回收任何应用程序工作进程时,datatable对象将可用于您的webmethod。

代码语言:javascript
运行
复制
//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)。加载过程与上面相同,但存储方式不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/400926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档