C# 无法使用ASP.NET Redis SessionState提供程序连接到本地Redis Sentinel故障切换系统

C# 无法使用ASP.NET Redis SessionState提供程序连接到本地Redis Sentinel故障切换系统,c#,asp.net,redis,session-state,stackexchange.redis,C#,Asp.net,Redis,Session State,Stackexchange.redis,我有一个内部部署的Redis环境,设置了Sentinel进行故障切换。我试图在MVC应用程序中使用Redis作为SessionStateProvider。我已经安装了Microsoft.Web.RedisessionStateProvider NuGet包,并且我有我的提供程序的Web.config条目。通读微软对该提供商的支持,似乎多主机支持是通过connectionString属性添加的 通过公告博客上的评论提出的问题: @西达斯 Redis Redis客户端允许使用ConnectionMu

我有一个内部部署的Redis环境,设置了Sentinel进行故障切换。我试图在MVC应用程序中使用Redis作为SessionStateProvider。我已经安装了Microsoft.Web.RedisessionStateProvider NuGet包,并且我有我的提供程序的Web.config条目。通读微软对该提供商的支持,似乎多主机支持是通过connectionString属性添加的

通过公告博客上的评论提出的问题:

@西达斯

Redis Redis客户端允许使用ConnectionMultiplexer列出多个主机,如github.com/../Basics.md所示。如何设置多个主机以传递到Redis客户端?在前面的评论中,您提到打开可设置的optionString,在这种情况下,我们将能够通过多个主机

答复如下:

@德沃拉克

ConnectionMultiplexer redis=>ConnectionMultiplexer.Connect(“server1:6379,server2:6379”)

您可以使用会话状态提供程序中的“connectionString”设置传递此“server1:6379,server2:6379”

我试图找到比这篇博文和评论更多的文档,但我找不到任何实质性的东西。在我寻找更多信息的过程中,我相信我读到了提供者应该能够通过遍历所有提供的主机来确定哪个主机是主主机

到目前为止,我99%确定我需要使用connectionString来支持多个主机,尽管我仅1%确定这个RedisessionStateProvider具有Sentinel支持。我一直在努力打造一个合适的连接字符串,目前面临以下例外:

Microsoft.Web.RedisSessionStateProvider.dll中发生类型为“StackExchange.Redis.RedisConnectionException”的异常,但未在用户代码中处理

附加信息:没有连接可用于服务此操作:EVAL

我的connectionString目前采用以下格式:

connectionString=“1.2.3.4:5,1.2.3.4:5,1.2.3.4:5,1.2.3.4:5,1.2.3.4:5,1.2.3.4:5,ssl=true,密码=XXXXXX,中止连接=false”

如果任何人有任何信息可以引导我走向正确的方向,我将不胜感激


我已经建立了telnet,并向Redis服务器发送了消息,因此我知道我有访问权限,可以从我的机器建立连接。我忍不住觉得,我要么没有正确编写连接字符串,要么ASP.NET会话状态提供程序无法处理此配置,我应该考虑构建一些自定义内容。

StackExchange.Redis客户端支持多台服务器,但它是关于主服务器和从服务器,而不是多个主服务器的支持(像群集一样)。ASP.NET Redis会话提供程序不支持主/从会话,实际上转到从会话是没有用的,因为您只能从它读取数据(您只能将它用于只读会话)。
如果要为on-prem Redis服务器设置高可用性,则必须使用内部DNS服务器并为Redis会话实例创建记录。您应该在web.config中使用该DNS记录,而不是在IP中使用,因为在发生故障转移时,您将使用新的主IP更新该DNS条目