c# - 无法使用 ASP.NET session 状态提供程序连接到 Redis 服务器

标签 c# asp.net .net session redis

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

我们有一个用于 Redis 的本地 Sentinel 配置。最初我认为这是行不通的,因为提供者不支持 Sentinels。我将连接字符串切换为使用 master,希望我至少能够建立连接。依然没有。

我已经为这个提供者尝试了多种配置,并不断收到“请求没有可用的连接”或“附加信息:无法连接到 redis 服务器;要创建断开连接的多路复用器,请禁用 AbortOnConnectFail . PING 上的 UnableToResolvePhysicalConnection。”

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

尝试 #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 并确定要连接的主实例,我欢迎发表博文或分享有关该主题的任何类型的知识。

谢谢!

最佳答案

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

<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>

关于c# - 无法使用 ASP.NET session 状态提供程序连接到 Redis 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32184655/

相关文章:

c# - 如何从Web方法返回多个结果?

c# - 如何使用 say MEF 导出和导入应用程序服务?

c# - 如何使用最少的重复代码编写异步类?

c# - 如何识别 URL 的身份验证类型?

mysql - 将 MySQL 与 Entity Framework 一起使用

c# - mysql 更新查询(带有准备好的语句)不起作用

c# - 使用 jQuery 调用 put 方法时出现 WCF 内部服务器错误

c# - 如何在单击文本框时清除它?

.net - 将 WinForms 应用程序升级到 WPF

c# - 具有内置 WebKit 页面预览的 Web 开发应用程序