Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.Net会话状态提供程序故障转移方案_Asp.net_Session_Redis_Session State_Inproc - Fatal编程技术网

ASP.Net会话状态提供程序故障转移方案

ASP.Net会话状态提供程序故障转移方案,asp.net,session,redis,session-state,inproc,Asp.net,Session,Redis,Session State,Inproc,我们已经为我们的web应用程序实现了Redis会话状态提供程序,它工作起来很有魅力,但我想知道如果Redis服务器出现故障或者web服务器无法连接到Redis服务器会发生什么 有没有办法将InProc会话状态管理用作Redis的故障切换? 我找不到任何关于声明多个会话状态提供程序的文档,所以若redis失败,系统可以继续使用inproc。(我接受在redis中丢失会话状态,并在出现故障时从头开始,在Proc中再次丢失会话状态,如果redis可用,则重新从头开始)您需要为您的redis服务器定义从

我们已经为我们的web应用程序实现了Redis会话状态提供程序,它工作起来很有魅力,但我想知道如果Redis服务器出现故障或者web服务器无法连接到Redis服务器会发生什么

有没有办法将InProc会话状态管理用作Redis的故障切换?
我找不到任何关于声明多个会话状态提供程序的文档,所以若redis失败,系统可以继续使用inproc。(我接受在redis中丢失会话状态,并在出现故障时从头开始,在Proc中再次丢失会话状态,如果redis可用,则重新从头开始)

您需要为您的redis服务器定义从属服务器,并使用redis sentinel来监视您的服务器

我正在使用StackExchange库连接到redis服务器。这只是一个简单的代码,它只是显示了如何订阅事件,而不是将其作为最终解决方案。每当sentinel选择新服务器时,您将收到一个事件,以便您可以选择新服务器

ConnectionMultiplexer multiplexer =
   ConnectionMultiplexer.Connect(new ConfigurationOptions
   {
       CommandMap = CommandMap.Sentinel,
       EndPoints = { { "127.0.0.1", 26379 }, { "127.0.0.1", 26380 } },
       AllowAdmin = true,
       TieBreaker = "",
       ServiceName = "mymaster",
       SyncTimeout = 5000
   }); 
    multiplexer.GetSubscriber().Subscribe("*", (c, m) =>
        {

            Debug.WriteLine("the message=" + m);
            Debug.WriteLine("channel=" + c);

            try
            {
                var sentinelServer = multiplexer.GetServer("127.0.0.1", 26379).SentinelGetMasterAddressByName("mymaster");
                Debug.WriteLine("Current server=" + sentinelServer);
                Debug.Flush();
            }
            catch (Exception)
            {
                var sentinelServer = multiplexer.GetServer("127.0.0.1", 26380).SentinelGetMasterAddressByName("mymaster");
                Debug.WriteLine("Current server=" + sentinelServer );
                Debug.Flush();
            }
        });

我一直有一个类似的问题,Redis作为会话存储的支持失败,我找不到任何允许故障切换/回切到其他SessionStateProvider的东西


我希望有什么东西可以在mem表或类似的表中写入Redis和SqlServer,然后从1读取,如果从2读取失败的话。但是,这似乎还不存在。

因此,没有办法配置redis的替代方案,如ASP.Net InProcCheck this ticket@alirezam。我不相信ASP.Net redis会话状态提供程序支持redis Sentinel。如果你不知道的话,我很高兴我错了。很抱歉我反应太晚。你使用sentinel来配置你的redis。在asp.net中,你订阅sentinel服务器,并在服务器更改时收听事件,然后根据新服务器更新你的网络配置更新web.config不是一个好主意。还有别的办法吗?你不想订阅“+开关主机”活动吗?此外,您的代码并没有确切说明如何在应用程序中进行切换。请详细说明事件处理程序好吗?您需要从StackExchange导入库并使用global.asax文件中的代码