C# 枚举AppFabric缓存时引发NullReferenceException

C# 枚举AppFabric缓存时引发NullReferenceException,c#,appfabric-cache,C#,Appfabric Cache,我们使用的是Windows Server AppFabric 1.1,而不是Azure,我认为我们已经设法污染了缓存,因此得到了一些奇怪的结果 我们使用的是一个读通提供程序,因此当密钥不在缓存中时,读通提供程序将转到数据库,填充缓存并将值返回给客户端。顺便说一句,微软的团队决定要求通读提供商住在GAC——这已经造成了无尽的痛苦,所以我建议不要使用通读。我希望他们重新考虑这个选择 我的问题的症状是,当我尝试从缓存中获取一个项时,当我希望读通提供程序从数据库中获取值时,它返回null。重复调用返回n

我们使用的是Windows Server AppFabric 1.1,而不是Azure,我认为我们已经设法污染了缓存,因此得到了一些奇怪的结果

我们使用的是一个读通提供程序,因此当密钥不在缓存中时,读通提供程序将转到数据库,填充缓存并将值返回给客户端。顺便说一句,微软的团队决定要求通读提供商住在GAC——这已经造成了无尽的痛苦,所以我建议不要使用通读。我希望他们重新考虑这个选择

我的问题的症状是,当我尝试从缓存中获取一个项时,当我希望读通提供程序从数据库中获取值时,它返回null。重复调用返回null,排除了数据库的任何暂时性问题。如果我从缓存中删除该项并再次尝试获取它,则会成功

为了尝试了解问题的严重程度,我想我应该像下面这样枚举缓存中的所有项:

foreach (string regionName in cache.GetSystemRegions())
{
    var objectsInRegion = cache.GetObjectsInRegion(regionName);

    try
    {
        foreach (var keyValuePair in objectsInRegion)
        {
            var result = string.Format(
                "Key: {0}. Value: {1}", keyValuePair.Key, keyValuePair.Value);
            Console.WriteLine(result);
        }
    }
    catch (NullReferenceException)
    {
        Console.WriteLine("Unable to get key value pair");
    }
}
存在异常处理是因为在枚举特定区域的objectsInRegion时,缓存始终引发空引用异常

例外情况:

Microsoft.ApplicationServer.Caching.Core

在Microsoft.ApplicationServer.Caching.ChunkStream..ctorByte[][]缓冲区,布尔可写 在Microsoft.ApplicationServer.Caching.ChunkStream..ctorByte[] 在Microsoft.ApplicationServer.Caching.Utility.DeserializeByte[][]缓冲区,布尔checkTypeToLoad 位于Microsoft.ApplicationServer.Caching.CacheEnumerator.MoveNext\r\n

我怀疑我们的通读提供商在错误条件下做了一些错误的事情,但我还没有证明这一点。然而,我不希望AppFabric像这样从其核心抛出空引用异常


这是一个已知的问题吗?是否有任何进一步的信息可以提供帮助?

在完成一些测试后,AppFabric Cache可以优雅地处理我们的直通式提供程序引发的异常。更可能的情况是,缓存被某个缓存服务器的故障损坏。我们计划使用上面的代码来监视缓存

通过清除发生空引用异常的区域,可以更改上述代码以删除任何问题区域:

catch (NullReferenceException)
{
    Console.WriteLine("Unable to get key value pair. Clearing region: {0}", regionName);
    cache.ClearRegion(regionName);
}
然后,读通提供程序可以再次填充缓存