Using Redis as SessionState store for ASP.NET MVC application on .net 4.8

33 Views Asked by At

Using Azure Cache for Redis (C2 instance), with minimal users in QA for user session state in an ASP.NET MVC application on .NET 4.8.

We see this in AppInsights and it affects our regression tests and blocks deployment of the application:

Timeout performing EVAL (5000ms), inst: 10, qs: 9, in: 0, serverEndpoint: Unspecified/eiqlegacy-redis-int.redis.cache.windows.net:6380, mgr: 10 of 10 available, clientName: pd1ldwk000B8B, IOCP: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=9,Free=32758,Min=4,Max=32767), v: 2.0.519.65453 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)

Are there any additional settings we should implement?

Web.config for app, as it pertains to session:

<sessionState cookieless="UseCookies" customProvider="RedisSessionStateStore" 
              mode="Custom" timeout="60">
    <providers>
        <add name="RedisSessionStateStore" 
             type="Microsoft.Web.Redis.RedisSessionStateProvider" 
             applicationName="EIQ_Session" 
             settingsClassName="EIQ.Web.RedisSettings, EnsembleHP.EIQ.Web" 
             settingsMethodName="ConnectionString" ssl="true" 
             redisSerializerType="EIQ.Web.RedisSerializer, EIQ.Web" />
    </providers>
</sessionState> 

Call stack:

StackExchange.Redis.RedisTimeoutException:
   at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl (StackExchange.Redis, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46: C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:2197)
   at StackExchange.Redis.RedisBase.ExecuteSync (StackExchange.Redis, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46: C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:54)
   at StackExchange.Redis.RedisDatabase.ScriptEvaluate (StackExchange.Redis, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46: C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:1134)
   at Microsoft.Web.Redis.StackExchangeClientConnection+<>c__DisplayClass7_0.<Eval>b__0 (Microsoft.Web.RedisSessionStateProvider, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: C:\TeamCity\buildAgent\work\59b31e8e4035fd30\src\Shared\StackExchangeClientConnection.cs:68)
   at Microsoft.Web.Redis.StackExchangeClientConnection.OperationExecutor (Microsoft.Web.RedisSessionStateProvider, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: C:\TeamCity\buildAgent\work\59b31e8e4035fd30\src\Shared\StackExchangeClientConnection.cs:95)
   at Microsoft.Web.Redis.StackExchangeClientConnection.RetryLogic (Microsoft.Web.RedisSessionStateProvider, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: C:\TeamCity\buildAgent\work\59b31e8e4035fd30\src\Shared\StackExchangeClientConnection.cs:122)
   at Microsoft.Web.Redis.StackExchangeClientConnection.Eval (Microsoft.Web.RedisSessionStateProvider, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: C:\TeamCity\buildAgent\work\59b31e8e4035fd30\src\Shared\StackExchangeClientConnection.cs:68)
   at Microsoft.Web.Redis.RedisConnectionWrapper.TryTakeWriteLockAndGetData (Microsoft.Web.RedisSessionStateProvider, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: C:\TeamCity\buildAgent\work\59b31e8e4035fd30\src\RedisSessionStateProvider\RedisConnectionWrapper.cs:184)
   at Microsoft.Web.Redis.RedisSessionStateProvider.GetItemFromSessionStore (Microsoft.Web.RedisSessionStateProvider, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: C:\TeamCity\buildAgent\work\59b31e8e4035fd30\src\RedisSessionStateProvider\RedisSessionStateProvider.cs:293)
   at Microsoft.Web.Redis.RedisSessionStateProvider+<GetItemExclusiveAsync>d__20.MoveNext (Microsoft.Web.RedisSessionStateProvider, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: C:\TeamCity\buildAgent\work\59b31e8e4035fd30\src\RedisSessionStateProvider\RedisSessionStateProvider.cs:206)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
   at Microsoft.AspNet.SessionState.SessionStateModuleAsync+<GetSessionStateItemAsync>d__74.MoveNext (Microsoft.AspNet.SessionState.SessionStateModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
   at Microsoft.AspNet.SessionState.SessionStateModuleAsync+<AcquireStateAsync>d__65.MoveNext (Microsoft.AspNet.SessionState.SessionStateModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
   at Microsoft.AspNet.SessionState.TaskAsyncHelper.EndTask (Microsoft.AspNet.SessionState.SessionStateModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35)
   at System.Web.HttpApplication+AsyncEventExecutionStep+<>c__DisplayClass11_0.<InvokeEndHandler>b__0 (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)
   at System.Web.HttpApplication+AsyncEventExecutionStep.InvokeEndHandler (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)
   at System.Web.HttpApplication+AsyncEventExecutionStep.OnAsyncEventCompletion (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)
0

There are 0 best solutions below