ミドルウェアからいくつかのデータを取得し、それを使用していくつかの処理を行い、必要に応じてすばやく取得できるように、名前と値のペアの辞書をキャッシュに保存する vb.net コードを作成しています。
キャッシュからオブジェクトを取得するまではすべてうまくいくようで、常に Null/Nothing です。
しかし、ウォッチ ウィンドウには、キャッシュされたオブジェクトが表示され、データが含まれています。
おそらくそれはシリアライゼーションの問題だと考えて、ディクショナリを継承し、シリアライズ可能としてマークされた新しいクラスを作成しましたが、それでも同じ結果が得られます。
だから今、私はこのクラスを持っています:
<Serializable()> Public Class SerialDict
Inherits Dictionary(Of String, String)
Public Sub New()
End Sub
End Class
私はそれを移入し、次のようにキャッシュに入れます:
Dim Licenses As New SerialDict
For Each r As DataRow In dtLicenses.Rows
Dim prikey As String = r("SettingID").ToString.Trim
Dim decryptionKey As String = GetHash((xx))
Dim licData As String = DecryptData(r("SettingVal"), decryptionKey)
Licenses.Add(r("SettingKey"), licData)
Next
If IsNothing(HttpContext.Current.Cache("Licenses")) Then
HttpContext.Current.Cache.Add("Licences", Licenses, Nothing, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, Nothing)
End If
次に、他の場所でそのデータを確認する必要があるため、次のように取得しようとします。
Dim Licences As SerialDict = CType(HttpContext.Current.Cache("Licenses"), SerialDict)
この時点で、Licenses は常に Nothing ですが、ウォッチ ウィンドウには HttpContext.Current.Cache("Licenses") のデータが表示されます。
助言がありますか?ありがとう!