данные сессии отсутствуют в asp.net иногда только - PullRequest
0 голосов
/ 30 мая 2018

Мое приложение asp.net, недавно размещенное на Azure, после этого мы столкнулись с проблемой потери данных в сеансе, это происходит не всегда, а случайным образом, но когда оно было размещено в IIS, этой проблемы не было.

У нас есть собственный список сущностей, и есть возможность загрузки файлов, когда пользователь загружает файл, который мы сохраняем в БД, в то же время сохраняя его в сеансе, в то время как они загружают N файлов, которые приложение успешно обработало и сохранилов БД и сессии.Но после сохранения (здесь событие нажатия кнопки) в том же жизненном цикле, когда наступает загрузка страницы, данные отсутствуют.Я проверил / отладил, что между этими событиями нет кодов, изменяющих данные сеанса.

Примечание. Эта проблема возникает только на сервере, а не на localhost.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Я заметил, что Azure помечен в вопросе.

В Azure мы должны запустить минимум двух экземпляров, которые в основном являются средой веб-фермы.В результате нам нужно использовать Redis Cache .

Вы просто создаете Redis Cache в Azure и добавляете следующее в web.config .

<configuration>
  <connectionStrings>
    <add name="RedisConnection" connectionString="REDIS_CONNECTION_STRING" 
          providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>    
    <sessionState mode="Custom" customProvider="SessionStateStore">
      <providers>
        <add name="SessionStateStore" 
          type="Microsoft.Web.Redis.RedisSessionStateProvider" 
          connectionString="RedisConnection" />
      </providers>
    </sessionState>
  </system.web>
<configuration>

Быстрый и грязный способ заставить его работать без Redis Cache - включить Affinity Cookie в портале Azure.Однако это не рекомендуется, поскольку вы не можете масштабировать приложение.

enter image description here

0 голосов
/ 30 мая 2018

В случае, если это работает на IIS, но не на Azure.Это звучит как проблема времени ожидания сеанса (вероятно, это глобальные настройки сервера).
Я бы предложил добавить явное время ожидания сеанса в ваш файл web.config.

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

Режим InProc, который хранит состояние сеанса в памяти на веб-сервере.Это значение по умолчанию.

cookieless = false , если ни один запрос не обрабатывается как cookieless.

timeout , Указывает количество минут сеансаможет быть простаивает до того, как его покинут.

Подробнее на MSDN Library

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...