【问题标题】:Can't connect to Redis server using ASP.NET Session State Provider无法使用 ASP.NET 会话状态提供程序连接到 Redis 服务器
【发布时间】:2015-11-18 00:22:28
【问题描述】:

一段时间以来,我一直在尝试用 Redis 替换 ASP.NET Session。使用Microsoft ASP.NET Session State Provider for Redis 的多个小时都没有结果。

我们有一个用于 Redis 的本地 Sentinel 配置。最初我认为这不起作用,因为提供者不支持哨兵。我将连接字符串切换为使用主服务器,希望我至少能够建立连接。依然没有。

我已为此提供程序尝试了多种配置,并不断收到“没有可用于请求的连接”或“其他信息:无法连接到 redis 服务器;要创建断开连接的多路复用器,请禁用 AbortOnConnectFail . UnableToResolvePhysicalConnection on PING。”

以下是我尝试过的一些配置:

尝试 #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>

尝试 #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>

尝试 #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>

我发现有关此提供程序的文档很少,故障排除一直是一个挑战。与 Microsoft 提供商相比,我遇到了第三方提供商并决定尝试一下。

我能够成功连接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" />
  </providers>
</sessionState>

考虑到这一点,Microsoft 提供程序的连接字符串的正确格式是什么?对我来说,从第一方图书馆获得内部支持会更容易,在这一点上,让这项工作发挥作用将是道德上的胜利。

另外,如果有人知道我如何配置它以点击 Sentinel 并确定要连接的主实例,我会欢迎您发表博客文章或任何形式的有关该主题的知识分享。

谢谢!

【问题讨论】:

  • 你在使用 Azure Redis 缓存吗?还是本地/云自定义服务器?
  • 本地、自定义服务器。
  • 我会尝试复制您的场景。您的 redis 实例是否在 Windows 上运行?哪个操作系统版本?
  • 这是一个在 Linux 上运行的机器。

标签: c# asp.net .net session redis


【解决方案1】:

我可以给你一个工作配置的例子,我们在我们的生产中,没有哨兵,但直接给主人:

<system.web>
  <sessionState mode="Custom" customProvider="Custom_RedisSessionStateStore">
    <providers>
    <add name="Custom_RedisSessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="your_host_name_goes_here" accessKey="" port="6379" ssl="false" operationTimeoutInMilliseconds="5000" />
    </providers>
  </sessionState>
</system.web>

【讨论】:

  • 我不太确定为什么,但那行得通!它必须是 ssl=false 标志。根据我在收到的另一个错误中发现的其他一些文档,我一直将其设置为 true。嗬!现在,如果我能弄清楚如何让它与 Sentinels 一起运行......
猜你喜欢
  • 2015-03-11
  • 2015-03-10
  • 2015-09-08
  • 2011-06-09
  • 2012-08-23
  • 1970-01-01
  • 2014-12-24
  • 2015-11-28
  • 1970-01-01
相关资源
最近更新 更多