我一直试图用Redis替换ASP.NET Session一段时间了。 Microsoft ASP.NET Session State Provider for Redis的多个小时没有结果。
我们为Redis提供了本地Sentinel配置。最初我认为这不起作用,因为提供商不支持Sentinels。我切换连接字符串以使用主服务器,希望我至少能够建立连接。依然没有。
我为此提供程序尝试了多种配置,并不断收到“无法连接请求”或“其他信息:无法连接到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>
我发现这个提供商的文档很少,故障排除一直是个挑战。与微软提供商相比,我遇到了第三方提供商,并决定尝试使用它。
我能够使用以下配置成功连接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并确定要连接的主实例,我会欢迎博客文章或任何关于该主题的知识分享。
谢谢!
答案 0 :(得分:2)
我可以举一个工作配置的例子,我们在制作中有这个配置,没有哨兵,但直接给主人:
<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>