- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
AppFabric 存在问题,导致出现以下错误:
Exception type: ArgumentException
Exception message: An item with the same key has already been added.
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at Microsoft.ApplicationServer.Caching.DataCacheFactory.CreateRoutingClient(String cacheName, NamedCacheConfiguration config)
at Microsoft.ApplicationServer.Caching.DataCacheFactory.CreateNewCacheClient(DataCacheDeploymentMode mode, String cacheName, NamedCacheConfiguration config, IClientChannel channel)
at Microsoft.ApplicationServer.Caching.DataCacheFactory.GetCache(String cacheName)
at Microsoft.ApplicationServer.Caching.DataCacheFactory.GetDefaultCache()
... our code where we are attempting to retrieve a cache item from the default cache by its key
此错误在我们的测试环境中很少发生(我们还没有找到按需重现该问题的方案),但似乎总是在每次部署后在我们的生产环境中发生。我们的部署是自动化的,并且我们已验证部署到各种环境的步骤是相同的。
我们针对给定环境的服务器设置如下:
这些服务器是负载平衡的。 AppFabric 本地缓存已在两个应用程序上启用。我们的测试和生产服务器设置相同。我们知道最好在专用服务器上安装 AppFabric,但认为这不会导致/解决此问题。
我们被这个问题难住了,因为我们没有在网上其他地方找到任何提及它的地方,而且堆栈跟踪似乎表明这是 AppFabric 本身的问题。异常提到插入一些东西,但发生这种情况时我们所做的只是尝试从 DataCacheFactory 获取默认缓存,以便我们可以从中检索项目。那么,这个错误是什么意思,我们该如何解决?
更新
这是我用来创建 DataCacheFactory
并从缓存中提取数据的代码:
private static readonly Lazy<DataCacheFactory> _DATA_CACHE_FACTORY = new Lazy<DataCacheFactory>(() => new DataCacheFactory());
private static readonly Lazy<DataCache> _CACHE = new Lazy<DataCache>(() => _DATA_CACHE_FACTORY.Value.GetDefaultCache());
public object Get(string key)
{
return _CACHE.Value.Get(key);
}
最佳答案
我 100% 确定重复 key 错误是由对 DataCacheFactory
的私有(private) _myCache
属性的错误访问引起的。该属性是一个哈希表。重复调用 Hashtable.Add("mykey","myvalue");
将产生与您看到的相同的期望。
我运行了多个测试,并且连续调用 GetCache("default")
和 GetDefaultCache()
不会产生错误。 App Fabric 试图填充它的方式肯定有些奇怪。这是我的代码,从未产生过此错误。我想发布以供引用,以防您看到与您的代码所做的明显不同的东西
if (cache == null)
{
if(factory == null)
factory = new DataCacheFactory();
if(string.IsNullOrWhiteSpace(cacheName))
cacheName = ConfigurationManager.AppSettings["APP_FABRIC_CACHE_NAME"];
cache = factory.GetCache(cacheName);
return cache;
}
在上面的例子中,cache
和 factory
是它们各自类型的 private static
版本,在一个名为 Cache 的静态类中
。
希望对你有帮助
关于c# - AppFabric CreateRoutingClient 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22300056/
AppFabric 存在问题,导致出现以下错误: Exception type: ArgumentException Exception message: An item with the same
我是一名优秀的程序员,十分优秀!