我正在尝试使用StackExchange.Redis.StrongName V1.2.1连接到Azure Redis缓存
我的代码看起来像这样
string redisServer = ConfigManager.GetValue("RedisServer");
redis = ConnectionMultiplexer.Connect(redisServer);
redisDB = redis.GetDatabase();
var serializedValue = redisDB.StringGet(key);
最后一行总是抛出此异常
{“拒绝访问注册表项'238'。”}
at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode,String str)at Microsoft.Win32.RegistryKey.InternalGetValue(String name, 对象defaultValue,Boolean doNotExpand,Boolean checkSecurity)at Microsoft.Win32.RegistryKey.GetValue(String name)at System.Diagnostics.PerformanceMonitor.GetData(String item)at System.Diagnostics.PerformanceCounterLib.GetPerformanceData(字符串 项目) System.Diagnostics.PerformanceCounterLib.GetCategorySample(字符串 类别) System.Diagnostics.PerformanceCounterLib.GetCategorySample(字符串 机器,字符串类别)at System.Diagnostics.PerformanceCounter.NextSample()at System.Diagnostics.PerformanceCounter.NextValue()at StackExchange.Redis.PerfCounterHelper.TryGetSystemCPU(Single& value)
的标志
在StackExchange.Redis.ConnectionMultiplexer.GetSystemCpuPercent()
在 StackExchange.Redis.ConnectionMultiplexer.GetThreadPoolAndCPUSummary() at StackExchange.Redis.ExceptionFactory.NoConnectionAvailable(Boolean includeDetail,RedisCommand命令,消息消息,ServerEndPoint server,ServerEndPoint [] serverSnapshot)at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl [T](消息 消息,ResultProcessor1 processor, ServerEndPoint server) at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor
1处理器,ServerEndPoint服务器)at StackExchange.Redis.RedisDatabase.StringGet(RedisKey key,CommandFlags cacheManager.Get [T](String key)
使用本地Redis缓存服务器时,相同的代码工作正常。
有任何建议如何解决这个问题?
答案 0 :(得分:0)
根据您的描述,我已经通过创建一个控制台应用程序和一个Web应用程序测试了这个问题,这些应用程序和Web应用程序都是通过引用StackExchange.Redis 1.2.1或StackExchange.Redis.StrongName 1.2.1来设置/获取关键值来定位.NET Framework 4.5。 Azure Redis缓存,它可以按预期工作。
使用本地Redis缓存服务器时,相同的代码工作正常。
根据您的代码,IDatabase.StringGet
引发了异常,我假设您可以尝试检查Azure Redis缓存连接字符串并按照官方tutorial关于连接到Azure Redis缓存。或者您可以提供有关您的方案的更多详细信息(例如您的托管环境等),然后我们可以更好地帮助您找到并解决此问题。
答案 1 :(得分:0)
这个callstack的有趣部分在这里:
StackExchange.Redis.PerfCounterHelper.TryGetSystemCPU(Single& value)
上面的代码试图实例化一个PerformanceCounter对象,以便它可以查询本地系统的CPU使用情况。最后我检查过,该代码捕获了所有异常,因为它知道某些环境不允许您创建PerformanceCounters。该异常不应该冒泡到您的应用程序。如果该异常冒泡到您的应用层,那么这将是StackExchange.Redis中的回归,并且应该在那里提交修复。