- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将 Azure Redis 缓存(用于开发的 Basic C0)集成到我们的一个 .Net 系统 (.Net 4.6.1) 中,并使用 StackExchange.Redis v2.6.90 客户端库。这一切都在 Windows 环境中运行(10 用于本地开发,Server 2019 Std 用于测试)
我创建了一个基本包装器来为我处理连接:
using System;
using System.Net;
using StackExchange.Redis;
namespace Rimes.Azure
{
public class RedisCache
{
private ConnectionMultiplexer _redis;
private void Initialize(ConfigurationOptions options)
{
// Azure requires TLS 1.2 but .Net uses TLS 1.1 by default
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
_redis = ConnectionMultiplexer.Connect(options);
}
public RedisCache(string endPoint, string token, bool useSsl = true, bool abortOnConnectFail = true)
{
var options = ConfigurationOptions.Parse(endPoint);
options.Password = token;
options.Ssl = useSsl;
options.AbortOnConnectFail = abortOnConnectFail;
Initialize(options);
}
public string Get(string key)
{
IDatabase db = _redis.GetDatabase();
return db.StringGet(key);
}
public bool Set(string key, string value, int timeToLive)
{
IDatabase db = _redis.GetDatabase();
return db.StringSet(key, value, TimeSpan.FromSeconds(timeToLive));
}
}
}
这在我的本地开发机器上完美运行(惊讶!我知道,这些问题之一),具有出色的性能。从测试服务器来看,它根本不起作用 - 唯一的响应是 RedisTimeoutException
(获取、设置,我相信还有实例化,考虑到实例化所需的时间):
Exception type: RedisTimeoutException
Exception message: Timeout performing PSETEX (5000ms), inst: 0, qu: 1, qs: 0, aw: False, bw: SpinningDown, last-in: 0, cur-in: 0, sync-ops: 2, async-ops: 1, serverEndpoint: xxx.redis.cache.windows.net:6380, conn-sec: n/a, mc: 1/1/0, mgr: 10 of 10 available, clientName: xxx(SE.Redis-v2.6.90.64945), IOCP: (Busy=0,Free=1000,Min=12,Max=1000), WORKER: (Busy=2,Free=32765,Min=12,Max=32767), v: 2.6.90.64945 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server, T defaultValue)
at Rimes.Azure.RedisCache.Set(String key, String value, TimeSpan expiry)
我已经浏览了错误消息中提供的链接中的建议,并阅读了该地方的大量 Material ,但似乎没有任何有关查找内容的建议对我的情况有效
我尝试过的:
根据上述内容,我知道这个问题存在于我的 .Net 环境中的某个地方,但我的经验有限,我不确定现在该去哪里解决。我欢迎任何建议!
更新:
我确实在 2 月 14 日星期五在测试服务器上运行了此功能,但在 2 月 17 日星期一却无法运行。环顾四周,我发现了两个针对 .Net 的 MS 安全更新,这些更新是为了修复 14 日的一个关键安全更新而发布的 - KB5022504和KB5022782
删除这些更新没有什么区别,但它确实让我研究了 .Net 更新,并且不同的组策略设置似乎会导致不同的更新实践。在我们的服务器上,我们仅获得安全更新,在我的开发机器上,我仅获得功能更新
更新:
在 Azure Redis 上打开并使用非 SSL 端口是可行的。回拨到 TLS 1.0 也可以。将 TLS 设置为更高的值会失败,并在额外日志记录中显示以下输出:
11:09:02.9964: Allowing 1 endpoint(s) 00:00:05 to respond...
11:09:02.9964: Awaiting 1 available task completion(s) for 5000ms, IOCP: (Busy=0,Free=1000,Min=2,Max=1000), WORKER: (Busy=4,Free=32763,Min=10,Max=32767)
11:09:03.0241: Configuring TLS
11:09:03.0554: Connection failed: xxx.redis.cache.windows.net:6380 (Subscription, AuthenticationFailure): AuthenticationFailure on xxx.redis.cache.windows.net:6380/Subscription, Initializing/NotStarted, last: NONE, origin: ConnectedAsync, outstanding: 0, last-read: 0s ago, last-write: 0s ago, keep-alive: 60s, state: Connecting, mgr: 10 of 10 available, last-heartbeat: never, global: 0s ago, v: 2.6.96.30123
11:09:03.0554: > A call to SSPI failed, see inner exception.
11:09:03.0554: > The function requested is not supported
11:09:03.0554: xxx.redis.cache.windows.net:6380: OnConnectedAsync completed (Disconnected)
...
11:09:03.1178: Endpoint Summary:
11:09:03.1178: xxx.redis.cache.windows.net:6380: Standalone v4.0.0, primary; keep-alive: 00:01:00; int: Disconnected; sub: Disconnected; not in use: DidNotRespond
11:09:03.1178: xxx.redis.cache.windows.net:6380: int ops=0, qu=0, qs=0, qc=0, wr=0, socks=3; sub ops=0, qu=0, qs=0, qc=0, wr=0, socks=3
11:09:03.1178: xxx.redis.cache.windows.net:6380: Circular op-count snapshot; int: 0 (0.00 ops/s; spans 10s); sub: 0 (0.00 ops/s; spans 10s)
11:09:03.1178: Sync timeouts: 0; async timeouts: 0; fire and forget: 0; last heartbeat: -1s ago
11:09:03.1178: Starting heartbeat...
11:09:08.1781: Encountered exception: StackExchange.Redis.RedisTimeoutException: The timeout was reached before the message could be written to the output buffer, and it was not sent, command=SUBSCRIBE, timeout: 5000, inst: 0, qu: 0, qs: 0, aw: False, bw: CheckingForTimeout, rs: NotStarted, ws: Initializing, in: 0, last-in: 0, cur-in: 0, sync-ops: 0, async-ops: 1, serverEndpoint: xxx.redis.cache.windows.net:6380, conn-sec: n/a, mc: 1/1/0, mgr: 10 of 10 available, clientName: LDOKTATEST01(SE.Redis-v2.6.96.30123), IOCP: (Busy=0,Free=1000,Min=2,Max=1000), WORKER: (Busy=6,Free=32761,Min=10,Max=32767), v: 2.6.96.30123 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebugge
基于配置 TLS 后 SSPI 失败,我决定删除 SecurityProtocol
设置并尝试通过注册表将 .Net 配置为使用 TLS 1.2。 这有效
我现在缺少的是如何在代码中将 TLS 版本设置为 1.2,这样无需设置注册表项即可工作
最佳答案
对于我来说,我使用的是 .NET Framework 4.5.1。将以下内容添加到现有连接字符串可以解决该问题:sslProtocols=tls12
。我使用的是 StackExchange.Redis v 1.2.6(当时是 .Net Framework 支持的最新版本)。
此外,请确保您的应用程序使用 TLS 1.2。在 C# 中,可以使用以下代码完成此操作:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
部署到 Azure 时,请确保资源配置也设置为使用 TLS 1.2。
引用 https://learn.microsoft.com/en-us/azure/azure-cache-for-redis/cache-remove-tls-10-11#net-framework
关于.net - 无法使用 StackExchange.Redis 连接到 C# 中的 Azure Redis 缓存(超时错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75544378/
我通过 spring ioc 编写了一些 Rest 应用程序。但我无法解决这个问题。这是我的异常(exception): org.springframework.beans.factory.BeanC
我对 TestNG、Spring 框架等完全陌生,我正在尝试使用注释 @Value通过 @Configuration 访问配置文件注释。 我在这里想要实现的目标是让控制台从配置文件中写出“hi”,通过
为此工作了几个小时。我完全被难住了。 这是 CS113 的实验室。 如果用户在程序(二进制计算器)结束时选择继续,我们需要使用 goto 语句来到达程序的顶部。 但是,我们还需要释放所有分配的内存。
我正在尝试使用 ffmpeg 库构建一个小的 C 程序。但是我什至无法使用 avformat_open_input() 打开音频文件设置检查错误代码的函数后,我得到以下输出: Error code:
使用 Spring Initializer 创建一个简单的 Spring boot。我只在可用选项下选择 DevTools。 创建项目后,无需对其进行任何更改,即可正常运行程序。 现在,当我尝试在项目
所以我只是在 Mac OS X 中通过 brew 安装了 qt。但是它无法链接它。当我尝试运行 brew link qt 或 brew link --overwrite qt 我得到以下信息: ton
我在提交和 pull 时遇到了问题:在提交的 IDE 中,我看到: warning not all local changes may be shown due to an error: unable
我跑 man gcc | grep "-L" 我明白了 Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more inf
我有一段代码,旨在接收任何 URL 并将其从网络上撕下来。到目前为止,它运行良好,直到有人给了它这个 URL: http://www.aspensurgical.com/static/images/a
在过去的 5 个小时里,我一直在尝试在我的服务器上设置 WireGuard,但在完成所有设置后,我无法 ping IP 或解析域。 下面是服务器配置 [Interface] Address = 10.
我正在尝试在 GitLab 中 fork 我的一个私有(private)项目,但是当我按下 fork 按钮时,我会收到以下信息: No available namespaces to fork the
我这里遇到了一些问题。我是 node.js 和 Rest API 的新手,但我正在尝试自学。我制作了 REST API,使用 MongoDB 与我的数据库进行通信,我使用 Postman 来测试我的路
下面的代码在控制台中给出以下消息: Uncaught DOMException: Failed to execute 'appendChild' on 'Node': The new child el
我正在尝试调用一个新端点来显示数据,我意识到在上一组有效的数据中,它在数据周围用一对额外的“[]”括号进行控制台,我认为这就是问题是,而新端点不会以我使用数据的方式产生它! 这是 NgFor 失败的原
我正在尝试将我的 Symfony2 应用程序部署到我的 Azure Web 应用程序,但遇到了一些麻烦。 推送到远程时,我在终端中收到以下消息 remote: Updating branch 'mas
Minikube已启动并正在运行,没有任何错误,但是我无法 curl IP。我在这里遵循:https://docs.traefik.io/user-guide/kubernetes/,似乎没有提到关闭
每当我尝试docker组成任何项目时,都会出现以下错误。 我尝试过有和没有sudo 我在这台机器上只有这个问题。我可以在Mac和Amazon WorkSpace上运行相同的容器。 (myslabs)
我正在尝试 pip install stanza 并收到此消息: ERROR: No matching distribution found for torch>=1.3.0 (from stanza
DNS 解析看起来不错,但我无法 ping 我的服务。可能是什么原因? 来自集群中的另一个 Pod: $ ping backend PING backend.default.svc.cluster.l
我正在使用Hibernate 4 + Spring MVC 4当我开始 Apache Tomcat Server 8我收到此错误: Error creating bean with name 'wel
我是一名优秀的程序员,十分优秀!