小编Chr*_*tka的帖子

为Sentinel配置配置ASP.NET Redis会话状态提供程序

我一直试图在我的应用程序中配置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",这就是它指示我做的事情.连接字符串中存在或不存在相同的错误.

考虑到这一点,这是我的问题......

  1. 此提供商是否支持Sentinel配置?
  2. 如果是,连接字符串的正确格式是什么?
  3. 有没有人有这方面的任何其他良好的文档资源?我甚至都没有在该博客文章之外的微软网站上找到任何东西.

编辑:我应该注意,这是一个自定义的本地Redis安装.我们没有通过Azure运行.

编辑:我最近试图将我的工作配置指向Sentinel,我收到"没有连接可用于服务此操作:EVAL." 这让我相信这个提供商没有Sentinel支持.谁能证实这一点?

c# asp.net session redis redis-sentinel

5
推荐指数
1
解决办法
9115
查看次数

无法使用 ASP.NET 会话状态提供程序连接到 Redis 服务器

一段时间以来,我一直在尝试用 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)

.net c# asp.net session redis

4
推荐指数
1
解决办法
5645
查看次数

版本对象错误地比较了两个版本

我正在使用 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)

.net c# asp.net version compareto

3
推荐指数
1
解决办法
4858
查看次数

标签 统计

asp.net ×3

c# ×3

.net ×2

redis ×2

session ×2

compareto ×1

redis-sentinel ×1

version ×1