簡體   English   中英

在ASP.NET中使用WCF服務,如何緩存?

[英]Consuming WCF Service in ASP.NET, how to cache?

在這種情況下,我有兩種情況:

我想查詢WCF服務並將數據保存在某處,因為其中一個網頁是根據從服務中檢索到的數據來呈現的。 我不希望頁面本身查詢服務,但我希望有某種調度的工作程序每隔幾分鍾運行一次,並檢索數據並將其保存在某個地方。

我應該在哪里緩存服務響應,以及每兩分鍾創建一次查詢服務的任務的正確方法是什么?

我想我可以通過將響應保存到靜態變量以及最后一個查詢日期來實現此目的,然后檢查頁面加載是否經過了足夠的時間,然后調用服務並刷新數據,否則使用靜態緩存。

這也可以解決以下情況:長時間沒有用戶訪問該頁面,並且站點沒有對服務進行無用的查詢。

但這似乎有些粗糙,還有其他更好的方法可以完成此類任務嗎?

你看過速度了

您確實可以采取另一種方法,例如讓計划的程序查詢信息並將其放入服務器場中所有Web服務器可用的內存緩存中。 但是,這是否適合您的情況取決於應用程序的大小以及您要花費多少時間/精力。

內存中的緩存比靜態變量更難實現/支持,但有時會更好,因為每次服務器重置時(例如,在X閑置數分鍾后),靜態變量都可以清除。

根據系統的大小,我將從靜態變量開始,測試一下該方法一會兒,然后確定是否需要更復雜的東西。

Nico:為什么不編寫一個簡單的控制台守護程序來獲取數據並將其存儲在數據庫中,然后讓您的Web應用程序從本地副本獲取數據? 您可以使控制台應用程序每隔一定時間運行一次。 如果使用的是sql server 2008,則插入數據應該沒有問題。可以將datatable參數傳遞到存儲的proc並在一個調用中插入整個表。 如果您不使用Sql Server 2008,則序列化Web服務返回的整個集合,並將其存儲在一個大blob列中的表中,並在獲取數據時記錄時間戳。 然后,您可以閱讀該列的內容,取消集合化,並將其重建為本機對象以顯示在頁面上。

我從未見過(而且我認為這不可能)讓您的Web應用程序每隔一定時間查詢Web服務。 想象一下,該網站閑置了幾個小時,因此沒有任何人進行任何交互。 這意味着不會發生任何事件,也不會查詢任何內容。

或者,您可以創建一個虛擬頁面,該頁面以一定的時間間隔執行javascript函數,並使該javascript函數向服務器發出ajax請求,以從Web服務獲取數據並緩存數據。 問題在於,當您離開該頁面的那一刻,將不會發生任何事情,並且您將停止查詢Web服務。 我認為這很愚蠢。

暫無
暫無

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

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