2011-08-05 77 views
0

,我會說,我已經在.NET開發了多年,和VB/BASIC對於之前多年前言本,但我的背景主要是在桌面應用程序和系統接口 - 我仍然很新所有這些Web應用程序的東西,所以我很抱歉如果這是一個愚蠢的問題。從Web服務中的Web應用程序訪問緩存對象?

這就是我的問題:當您在ASPX頁面中創建對象並將其存儲在緩存中時,如何從駐留在同一應用程序中的ASMX Web服務訪問它?

爲了進一步闡述:我有一個包含ASPX頁面,一個ASMX Web服務和一個由兩個對象類組成的類庫的Web應用程序。當用戶登錄到應用程序時,他們配置一些設置,並創建對象並將其存儲在system.Web.Caching.Cache對象中。然後,自定義對象從下一頁的緩存中取出,然後用戶向Web服務發出一個AJAX調用(通過jQuery)以檢索一些數據。

的問題是,在Web服務響應,我需要解析基於存儲在Web應用程序的高速緩存中的用戶創建的對象的內容返回的數據。但是,我找不到任何方式從Web服務內部訪問緩存的對象。

我有一個偷偷摸摸的懷疑,它可能會將我的自定義.NET對象序列化爲JSON對象,並通過AJAX調用將它們傳遞給Web服務進行反序列化,但坦率地說,我不知道如何開始在那。再加上這些對象的大小可能在30到40K之間,而且AJAX調用的頻率也是每3秒一次,所以我真的很想避免每次調用都會傳遞所有額外數據的開銷,特別是因爲數據我需要的是已經坐在Web服務所在的應用程序的內存中。

所以,我再次問:當你在一個ASPX頁面創建一個對象,並將其存儲在緩存中,你怎麼從駐留在同一應用程序的ASMX Web服務訪問它?

這是說的嗎?我瘋了嗎?缺少明顯的東西?任何人都可以提供的洞察力將非常高度讚賞。謝謝!

回答

6

可以使用HttpContext.Current訪問當前HTTP管道的狀態。因此,要訪問緩存,您需要使用HttpContext.Current.Cache

順便說一句,asmx網絡服務被認爲是傳統技術(見this) - 所以我建議你遷移到WCF服務。如果您使用WCF服務,則必須啓用ASP.NET兼容模式(請參閱this)才能訪問HttpContext

+0

這樣做!我知道必須有一個簡單的方法來做到這一點,我只是不知道這個對象模型。萬分感謝! – Erick

0

我還沒有嘗試過,你在找什麼,但對象存儲在緩存中的鍵值對的形式,其中鍵可以從簡單的整數的GUID和價值是你的對象什麼。根據我的理解,asmx服務只需要密鑰,以便它可以查看緩存並返回對象。但是,我的理解不是我嘗試過這種情況。

+0

任何想法如何在代碼中做到這一點?當我這樣做:'Dim cacheObj As New System.Web.Caching.Cache Dim MyWall As Wall = cacheObj.Get(「Wall」) '我得到一個「未設置爲對象實例的對象引用」錯誤。 .. – Erick

+0

@Erick - 它看起來像你正在創建一個新的緩存實例,而不是訪問當前的實例。我想你想在他的回答中使用VinayC的方法。 – Tim

+0

D'oh!是的,這很明顯,是吧?這就是我在14個工作日結束時進行調試的結果。 VinnyC的回答很有用。再次感謝您的幫助:-) – Erick