[英]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屬性
這可能有所幫助,只是一個想法......
便宜的選項#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.