如何从Windows Server AppFabric中仅提取密钥名称?

时间:2014-06-13 18:08:59

标签: appfabric

是否有方法从没有该对象的Windows Server版本的AppFabric中提取所有缓存键?

我知道我可以使用这样的代码:

foreach(string regionName in cache.GetSystemRegions())
{
   foreach (var cacheItem in cache.GetObjectsInRegion(regionName))
   {
      Console.WriteLine("Key={0} -- Value ={1}", cacheItem.Key,cacheItem.Value);
   }
}

我想避免将caheItem.Value部分拉回网络。

通过查看Microsoft.ApplicationServer.Caching.DataCache,Microsoft.ApplicationServer.Caching.SimpleClient,Microsoft.ApplicationServer.Caching.RoutingClient和Microsoft.ApplicationServer.Caching.DataCacheFactory,我可以看出来。这似乎不可能。

DataCacheFactory.GetCache(String)调用DataCacheFactory.Create,它被硬编码以返回SimpleClient或RoutingClient。我不能以这种方式插入,以便在不使用反射的情况下为自己提供不同的DataCache实现。

SimpleClient和RoutingClient中SendMsgAndWait的实现强制将ResponseBody的byte [] [] Value DataMember反序列化为对象ValueObj,调用类似Utility.Deserialize(partialResponse.Value,false);

如果开发人员推迟了反序列化,直到调用ValueObj {get;},这对于税收来说就不是问题。

这不会解决网络流量问题。它仍然需要使用AppFabric消息发送序列化对象。

在没有自定义DataCache实现并强制通过反射使用它的情况下,我没有看到另一种避免反序列化开销的方法。我没有看到任何方法来消除移动序列化对象的网络带宽,只是为了找到它们的密钥。

1 个答案:

答案 0 :(得分:0)

答案就是这个,杰里米,目前的实施不支持"拔出所有键的功能"。客户端的任何解决方法都没有帮助,因为服务器端根本不支持它。对不起,这可能不是你想要的答案。但是,从马的嘴里。 :) // J