当前位置: 首页 > 面试题库 >

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

谭京
2023-03-14
问题内容

我已经尝试使用Redis替换ASP.NET Session已有一段时间了。Microsoft
ASP.NET会话状态提供程序用于Redis的
多个小时一直没有结果。

我们为Redis提供了本地Sentinel配置。最初,我认为这是不可行的,因为提供程序不支持Sentinels。我将连接字符串切换为使用主服务器,希望至少能够建立连接。依然没有。

我已经为此提供程序尝试了多种配置,并连续收到“无可用请求连接”或“其他信息:无法连接到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并确定要连接的主实例,我将欢迎发表博客文章或就该主题进行任何形式的知识共享。

谢谢!


问题答案:

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

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


 类似资料:
  • 本文向大家介绍ASP.NET如何使用web服务的会话状态,包括了ASP.NET如何使用web服务的会话状态的使用技巧和注意事项,需要的朋友参考一下 在web服务中要用到ASP.NET中的会话对象,有2件事情需要做。   1.WebService 类需要继承System.Web.Services.WebService类   2.WebMethod中的EnableSession属性值应该设置为true

  • 问题内容: 通过多个实例扩展Web应用程序是Azure云的最大优势之一。为了实现对我们的Web角色云应用程序的多个VM支持,我们正在实现Azure Redis缓存。我们正在使用RedisSessionStateProvider提供程序来维护会话状态。以下是web.config文件中会话管理的配置设置。 我们的问题是会话超时不会随着用户的回发而延长,假设我们的用户在10:00 AM登录到应用程序,那

  • 我正在使用omniauth saml对Ruby on Rails应用程序上的用户进行身份验证。 身份验证一直运行良好,直到我们声明尝试与使用ADFS(Windows Active Directory)的公司合作。 我们的应用程序能够路由到ADFS登录屏幕,进行登录操作,当ADFS重定向回我们的应用程序时,我们会看到错误消息: 通过调试,我们可以看到omniauth saml生成了此消息。 通过挖掘

  • 我正在尝试使用pact来验证spring boot微服务。我已经从consumer生成了pact文件,并在provider端使用pact Broker验证了它。 我有另一个用例,在根据实际的服务响应验证pact文件之前,我需要执行一些代码。我读过关于状态改变URL和状态改变与闭包来实现它,但没有得到一个如何实现这一点的例子。有人能帮忙吗? 如果这个客户不存在,那么我将需要通过读取pact文件中的更

  • 问题内容: 我想对redis.conf进行一些更改,以便每当我键入redis-cli时,它就会将我连接到安装在远程服务器上的redis。 我知道我们可以通过以下方式连接到安装在远程服务器上的redis: 但是实际上,我有一些bash脚本,在那些脚本中,我在很多地方都使用过redis-cli。因此,我不想以每个文件中的redis-cli -h’IP- Address-Of-Server’替换redi

  • 问题内容: 我已经使用Ubuntu 10.10服务器上http://redis.io/topics/quickstart上的快速入门指南中的说明成功安装了Redis 。我将服务作为dameon运行(因此可以通过init.d运行) 该服务器是具有内部和外部IP的Rackspace Cluster的一部分。主机在端口6379上运行(Redis的标准配置) 我在iptables中添加了一行,以允许来自端