簡體   English   中英

在Web服務中重用/緩存數據表

[英]Reuse/cache datatable in a web service

我有一個Web應用程序,可以提取數據並顯示結果。 由於業務的性質,所有業務規則都包含在Web應用程序必須從中獲取的dll中。 因為有多個站點,並且我們不希望在所有部署的應用程序中包含核心dll,所以我們將對核心dll的任何調用合並到Web服務中。 這有助於更新核心dll時只需要推送一個新應用程序(即Web服務)。

通過這個架構,我發現任何登錄任何Web應用程序的人都會導致多次調用數據庫,以獲取隨后被解析的數據表。 有問題的數據表變化緩慢,我只需要每4-6小時更新一次。

當用戶想要查看同一數據表的不同視圖時,我熟悉在會話中存儲這樣的內容。 但是,webservice會話並不真正適用。 在Web服務中緩存數據表的好方法是什么,這樣我們就不會重復進行數據庫的昂貴訪問。

Web服務和應用程序都在C#和ASP.NET 2.0中,我們正在使用VS2005。

作為一種非常便宜的方式(但它存在),您可以使用WebMethod到達的CacheDuration屬性,它將緩存Web方法調用的結果。 更多信息:
CacheDuration屬性

這可能有所幫助,只是一個想法......

您可以使用memcached將任何數據存儲在內存中。 它運行在Linux和Windows上,並且它們還有幾個帶有C#的api實現。

便宜的選項#1 :將數據表創建為Web服務類的本地靜態變量。 將靜態構造函數中的datatable對象填充到類中。 當首次查詢服務以及任何應用程序工作進程回收時,數據表對象將可用於您的web方法。

//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)。 與上述相同的加載過程,但存儲不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM