我一直试图在我的应用程序中配置ASP.NET Redis会话状态提供程序一段时间.由于这篇文章,我终于能够成功连接到master和set/get键:无法使用ASP.NET Session State Provider连接到Redis服务器
现在,我的下一个问题是...使用Sentinel配置.
我熟悉SENTINEL get-master-addr-by-name master-dev-sessionstate命令来确定主人.这个提供商是否内置了此功能?基于上面链接的博客文章的评论(这也是我可以找到的唯一文档),似乎我应该能够使用connectionString属性来传递多个主机.不过,我不确定这些多个主机是否打算成为Sentinels.
<connectionStrings>
<add name="RedisConnection" connectionString="1.2.3.4:5,6.7.8.9:10,abortConnect=false,ssl=false,password=XXXXXX,operationTimeoutInMilliseconds=5000"/>
</connectionStrings>
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<clear/>
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="RedisConnection"/>
</providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)
像这样配置我的连接时,我收到此错误:
附加信息:无法连接到redis服务器; 要创建断开连接的多路复用器,请禁用AbortOnConnectFail.
即使我的连接字符串中只有主IP,我也会收到此错误.如上所示,我的连接字符串中有abortConnect ="false",这就是它指示我做的事情.连接字符串中存在或不存在相同的错误.
考虑到这一点,这是我的问题......
编辑:我应该注意,这是一个自定义的本地Redis安装.我们没有通过Azure运行.
编辑:我最近试图将我的工作配置指向Sentinel,我收到"没有连接可用于服务此操作:EVAL." 这让我相信这个提供商没有Sentinel支持.谁能证实这一点?
一段时间以来,我一直在尝试用 Redis 替换 ASP.NET Session。使用Microsoft ASP.NET Redis 会话状态提供程序进行了多个小时的尝试,但没有取得任何成果。
我们有一个针对 Redis 的本地 Sentinel 配置。最初我认为这不起作用,因为提供商不支持哨兵。我将连接字符串切换为使用主服务器,希望至少能够建立连接。依然没有。
我已尝试对此提供程序的多种配置,并不断收到“没有可用于请求的连接”或“其他信息:无法连接到 redis 服务器;要创建断开连接的多路复用器,请禁用 AbortOnConnectFail。UnableToResolvePhysicalConnection on平。”
以下是我尝试过的一些配置:
尝试#1:
<connectionStrings>
<add name="RedisConnection" connectionString="1.2.3.4:5,abortConnect=false,ssl=true,password=XXXXXX,ConnectTimeout=10000"/>
</connectionStrings>
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="RedisConnection" />
</providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)
尝试#2:
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="1.2.3.4" port="5" accessKey="XXXXXXX" />
</providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)
尝试#3:
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="1.2.3.4:5" accessKey="XXXXXXX" />
</providers>
</sessionState>
Run Code Online (Sandbox Code Playgroud)
我发现有关该提供商的文档很少,故障排除一直是一个挑战。我遇到了一个第三方提供商,并决定尝试一下,与微软提供商进行比较。
我能够使用以下配置成功连接Harbour.RedisSessionStateStore :
<sessionState mode="Custom" customProvider="RedisSessionStateProvider">
<providers>
<clear />
<add name="RedisSessionStateProvider" type="Harbour.RedisSessionStateStore.RedisSessionStateStoreProvider" host="PASSWORD@1.2.3.4:5" clientType="pooled" …Run Code Online (Sandbox Code Playgroud) 我正在使用 Version 对象来针对两个版本号运行 CompareTo 并在版本 >= versionA 时使 X 发生。
我的问题是在下面的代码中,CompareTo 声明 VersionB 大于 VersionA。
Version versionA = new Version("2.12");
Version versionB = new Version("2.121");
switch (versionB.CompareTo(versionA))
{
case 0: // Equal To
_doThis = true;
break;
case 1: // Greater Than
_doThat = true;
break;
case 2: // Less Than
_doNothing = true;
break;
}
Run Code Online (Sandbox Code Playgroud)
此比较适用于案例 2。我使用正则表达式来匹配传递给该方法的固件版本,如下所示:
^\S+\s(?(\d+.*)+)\s*.*$
我将接受类似于“2.12 版”的内容,而这个正则表达式将只剩下“2.12”,然后将其初始化为一个 Version 对象。
任何人都知道为什么 .NET 告诉我 2.12 版比 2.121 版更新?
编辑:
我已将代码更改为如下所示:
Version versionA = new Version("2.12");
Version versionB = …Run Code Online (Sandbox Code Playgroud)