2012-02-03 67 views
1

我是AppFabric服務器緩存的新手,但玩過之後,一切都像夢一樣工作。 我可以添加例如datatables到我的緩存,並得到回來使用就好了。AppFabric服務器緩存返回空值的dll對象

我得到了退出這個功能,並試圖用一個第三方來測試這個廠商的DLL,其中包括登錄會話數據(會話ID,日期的等)

我創建了方法WCF服務,您消耗此DLL登錄並將該會話存儲到我的緩存中。 這工作得很好,我可以通過使用PowerShell查看我的緩存統計信息來驗證此情況。 然後,我創建了另一種方法,該方法應該可以獲取此緩存會話並使用它來執行操作。這是我跑到牆上的地方。

我可以看到,我已經能夠得到高速緩存會話,但會話對象中的信息爲空(會話ID,日期的...)

我一直在來自世界各地,但沒有人serching此幫助接縫來面對這個問題。 所以我的問題是

  1. 燦AppFabric的服務器高速緩存給定對象的(公開/非公開沒有任何作用)的所有字段值?
  2. 有什麼方法可以查看緩存的實際存在內容,您可以在其中看到具有值的鍵和緩存對象?

感謝您的所有可能的意見!

問候 米科

回答

1

在AppFabric中你只能緩存中的對象是serialisable(或序列化的美國讀者:-))。事實上,你已經能夠將會話對象存儲在緩存中,這表明它們確實是可串行化的。但爲了弄清楚發生了什麼,我們需要深入探討一下。

默認情況下與binary serialisation,所有字段/對象的屬性被序列化,公共私人(而僅XML serialisation拾取公共值)。我們不知道AppFabric使用哪種序列化的風格,但二進制序列化往往效率更高,所以這是一個合理的假設,這是在封面下使用的。但是,可以使用NonSerialized attribute來覆蓋序列化行爲,因此標記爲NonSerialized的項目不會將其放入該對象的序列化版本中。 Selective Serialisation的MSDN頁面特別建議應將安全敏感信息標記爲不可序列化。

會話ID絕對屬於安全敏感信息的標題,因爲它是會話劫持的關鍵,所以我應該說這是您面臨的問題。你可以通過查看ILDasm或Reflector中的第三方DLL來查看會話類中的字段是否確實標記爲未序列化。

你能解決這個問題嗎?那麼當然,沒有什麼可以阻止你創建你自己的Session類,你從第三方的對象中填充它,而你保留所有的屬性serialisable和緩存。但請記住,你基本上正在做他們試圖阻止你做的事情......

+0

菲爾,幫助我前進的絕佳迴應!感謝您花時間幫助我。問候 – user1187122 2012-02-08 08:25:02