在Web服务中重用/缓存数据表

时间:2008-12-30 17:28:54

标签: c# web-services caching

我有一个Web应用程序,可以提取数据并显示结果。由于业务的性质,所有业务规则都包含在Web应用程序必须从中获取的dll中。因为有多个站点,并且我们不希望在所有部署的应用程序中包含核心dll,所以我们将对核心dll的任何调用合并到Web服务中。这有助于在更新核心dll时仅需要推送一个新应用程序(即Web服务)。

通过这个架构,我发现任何登录任何Web应用程序的人都会导致多次调用数据库,以便获取一个然后被解析的数据表。有问题的数据表变化缓慢,我只需要每4-6小时更新一次。

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

Web服务和应用程序都在C#和ASP.NET 2.0中,我们正在使用VS2005。

3 个答案:

答案 0 :(得分:3)

作为一种非常便宜的方式(但它存在),您可以使用WebMethod到达的CacheDuration属性,它将缓存Web方法调用的结果。更多信息:
CacheDuration property

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

答案 1 :(得分:1)

您可以使用memcached将所有数据存储在内存中。它在Linux和Windows上运行,并且还有几个api实现C#。

答案 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)。与上面相同的加载过程,但存储不同。