Кэш Azure Redis StackExchange.Redis.RedisConnectionException: нет доступного подключения для обслуживания этой операции: EVAL

Файл веб-конфигурации приложения Asp.net mvc 5

   sessionState mode="Custom" customProvider="RedisSessionProvider">
      providers>
add name="RedisSessionProvider" type="Microsoft.Web.Redis.RedisSessionStateProvider" port="6380" host="XXX.redis.cache.windows.net" accessKey="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" ssl="true" />
 providers>
    sessionState>

Когда я запускаю приложение, возникает ошибка

Server Error in '/' Application.
No connection is available to service this operation: EVAL
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: StackExchange.Redis.RedisConnectionException: No connection is available to service this operation: EVAL
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[RedisConnectionException: No connection is available to service this operation: EVAL]
   StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl(Message message, ResultProcessor`1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:1922
   StackExchange.Redis.RedisBase.ExecuteSync(Message message, ResultProcessor`1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisBase.cs:80
   StackExchange.Redis.RedisDatabase.ScriptEvaluate(String script, RedisKey[] keys, RedisValue[] values, CommandFlags flags) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisDatabase.cs:866
   Microsoft.Web.Redis.<>c__DisplayClass4.<Eval>b__3() in c:\TeamCity\buildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:113
   Microsoft.Web.Redis.StackExchangeClientConnection.RetryForScriptNotFound(Func`1 redisOperation) in c:\TeamCity\buildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:129
   Microsoft.Web.Redis.StackExchangeClientConnection.RetryLogic(Func`1 redisOperation) in c:\TeamCity\buildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:155
   Microsoft.Web.Redis.StackExchangeClientConnection.Eval(String script, String[] keyArgs, Object[] valueArgs) in c:\TeamCity\buildAgent\work\f55792526e6d9089\src\Shared\StackExchangeClientConnection.cs:113
   Microsoft.Web.Redis.RedisConnectionWrapper.Set(ISessionStateItemCollection data, Int32 sessionTimeout) in c:\TeamCity\buildAgent\work\f55792526e6d9089\src\RedisSessionStateProvider\RedisConnectionWrapper.cs:135
   Microsoft.Web.Redis.RedisSessionStateProvider.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) in c:\TeamCity\buildAgent\work\f55792526e6d9089\src\RedisSessionStateProvider\RedisSessionStateProvider.cs:408
   System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +906
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +142
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +92
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1055.0

person Ivan    schedule 09.12.2015    source источник


Ответы (5)


У меня была такая же проблема раньше, и я нашел решение, использующее другое: https://github.com/alex-simonov/RedisAspNetProviders

Этот работает для меня

person Roy Pun    schedule 29.12.2015

У меня было то же самое, и в конце концов я исправил это, добавив sslprotocols=tls12 в строку подключения. В этом нет необходимости, но, по-видимому, это необходимо, если использовать недавно созданные кэши Redis в Azure. Вероятно, из-за устаревания TLS 1.0 и 1.2.

person DdW    schedule 14.08.2020

Может быть по 3 причинам:

  1. Ваша строка подключения неверна (в любом случае выглядит нормально)
  2. Экземпляр еще не создан (обычно для создания в Azure требуется много времени)
  3. Вы столкнулись с проблемами брандмауэра (включая брандмауэр Windows)

Можете ли вы подключиться к экземпляру кеша Redis с помощью командной строки?

Загрузите redis для Windows здесь

а затем запустить

redis-cli -h XXX.redis.cache.windows.net -a XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 

Здесь вы можете найти подробную демонстрацию (на испанском языке, но консольные демонстрации по-прежнему можно использовать).

Совет ниндзя № 18 — Знакомство с Redis

В целях тестирования убедитесь, что у службы Redis открыт порт 6379 (это параметр порта без SSL, который необходимо включить в Azure).

Если вы не можете подключиться к своему экземпляру по одной из перечисленных выше причин.

person JuanK    schedule 10.12.2015
comment
я проверяю строку подключения и все в порядке, проверяю созданный экземпляр wzs. Можете ли вы помочь мне, как изменить брандмауэр на сервере Azure? - person Ivan; 12.12.2015
comment
Не является лазурным брандмауэром. См. локальный брандмауэр или брандмауэр Windows - person JuanK; 13.12.2015
comment
брандмауэр отключен. - person Ivan; 14.12.2015
comment
Можете ли вы подключиться к экземпляру кеша Redis с помощью командной строки? - person JuanK; 14.12.2015
comment
Нет, я добавил кеш Redis с лазурного портала. - person Ivan; 14.12.2015
comment
Вот что я имею в виду. Вы должны иметь возможность подключиться к экземпляру Azure Redis с помощью командной строки с вашего локального компьютера, как показано в примере выше. Я также добавил ссылку на видео о подключении Redis к Azure. - person JuanK; 14.12.2015
comment
Привет @Ivan Это сработало? У вас есть дополнительная информация по этому вопросу? - person JuanK; 16.12.2015

Я обнаружил, что у меня работает только следующая конфигурация в веб-конфигурации:

<sessionState mode="Custom" customProvider="MySessionStateStore">
  <providers>
    <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="PUTCORRECTNAMEHERE.edis.cache.windows.net:6380,password=YOURPRIMARYKEYPUTHERE,ssl=True,abortConnect=False" />
  </providers>
</sessionState>
person NickA    schedule 01.07.2016

Для меня это была проблема с брандмауэром.

На портале Azure я добавил свой IP-адрес в раздел брандмауэра, как показано ниже, и это сработало. Я дал ему имя

брандмауэр Azure Redis

person Anish    schedule 19.07.2020