我在 AppFabric 中使用了两个命名缓存:
- CacheA 只是成对的 [string,string],并没有以任何特殊方式使用
- CacheB 是成对的 [string,object](其中 object 是可序列化的类型),用作 ASP.NET MVC4 站点的会话存储
我有一个单独的 VS 项目,它试图枚举缓存的全部内容并输出每个项目:
foreach (string regionName in cache.GetSystemRegions()) {
foreach (var cacheItem in cache.GetObjectsInRegion(regionName)) {
Trace.WriteLine(String.Format("{0} \t\t {1}", cacheItem.Key, cacheItem.Value));
}
}
这对 CacheA 非常有效,但是使用 CacheB 运行它会引发异常(当 cache.GetObjectsInRegion() 返回非空值时):
未找到程序集“Microsoft.Web.DistributedCache,版本=1.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”。---> System.Runtime.Serialization.SerializationException:未找到程序集“Microsoft.Web.DistributedCache,版本=1.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”。 在 System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserializeInSharedTypeMode(XmlReaderDelegator xmlReader,Int32 声明类型 ID,类型声明类型,字符串名称,字符串 ns) 在 System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserialize(XmlReaderDelegator xmlReader,类型声明类型,字符串名称,字符串 ns) 在 System.Runtime.Serialization.NetDataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader,布尔验证对象名称) 在 System.Runtime.Serialization.XmlObjectSerializer.InternalReadObject(XmlReaderDelegator 读取器,布尔验证对象名称,DataContractResolver dataContractResolver) 在 System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator 读取器,布尔值 verifyObjectName,DataContractResolver dataContractResolver) 在 System.Runtime.Serialization.XmlObjectSerializer.ReadObject(XmlDictionaryReader 阅读器) 在 Microsoft.ApplicationServer.Caching.Utility.Deserialize(字节 [] [] 缓冲区,布尔 checkTypeToLoad,对象上下文,IEnumerable`1 knownTypes) 在 Microsoft.ApplicationServer.Caching.Utility.Deserialize(字节 [] [] 缓冲区,布尔 checkTypeToLoad,对象上下文) 在 Microsoft.ApplicationServer.Caching.Utility.Deserialize(字节 [] [] 缓冲区,布尔 checkTypeToLoad) 在 Microsoft.ApplicationServer.Caching.CacheEnumerator.MoveNext()
我看到无法从不同的应用程序读取 azure 缓存数据,并添加了对我的另一个项目的引用,其中包含这些对象在序列化之前的类(我实际上只想查看它们被序列化并存储在缓存中的值),但仅此一项并没有改变任何事情。