gpt4 book ai didi

c# - AppFabric CreateRoutingClient 错误

转载 作者:可可西里 更新时间:2023-11-01 08:50:03 26 4
gpt4 key购买 nike

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

此错误在我们的测试环境中很少发生(我们还没有找到按需重现该问题的方案),但似乎总是在每次部署后在我们的生产环境中发生。我们的部署是自动化的,并且我们已验证部署到各种环境的步骤是相同的​​。

我们针对给定环境的服务器设置如下:

  • Server1 - 托管我们的 .net 网站,并且是我们的 AppFabric 1.1 服务器
  • Server2 - 托管我们的 .net 网站

这些服务器是负载平衡的。 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;
}

在上面的例子中,cachefactory 是它们各自类型的 private static 版本,在一个名为 Cache 的静态类中

希望对你有帮助

关于c# - AppFabric CreateRoutingClient 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22300056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com