Я пишу некоторый код vb.net для извлечения некоторых данных из промежуточного программного обеспечения, что-то с ним делаю, а затем сохраняю словарь пар имя/значение в кэше для быстрого поиска при необходимости.
Кажется, все идет хорошо, пока я не извлекаю объект из кеша, и он всегда равен Null/Nothing.
Тем не менее, в окне просмотра я вижу свой кешированный объект, и в нем есть данные.
Подумав, может быть, это проблема сериализации, я создал новый класс, который наследует Dictionary и помечен как сериализуемый, но все равно получаю те же результаты.
Итак, сейчас у меня есть этот класс:
<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").
Какие-либо предложения? Спасибо!
DirectCast
вместоCType
. - person Visual Vincent   schedule 29.04.2016