Сеанс ASP.NET истек или не может быть найден -> Поскольку Session.SessionID изменяется (службы Reporting Services) - PullRequest
8 голосов
/ 29 февраля 2012

1.-Я использую службы отчетов, и иногда я получаю эту ошибку ASP.NET session has expired or could not be found при попытке загрузить отчет.

2.-Я понял, что я получаю эту ошибку, когда Session.SessionIDсвойство меняется, даже если пользователь тот же.Если он не изменяется, отчет загружается.Я имею в виду, что если я обновляю отчет несколько раз, когда Session.SessionID совпадает с последним, отчет загружается.

3.-Документация Microsoft гласит:

При использовании состояния сеанса на основе файлов cookie ASP.NET не выделяет хранилище для данных сеанса, пока не будет использован объект сеанса.В результате новый идентификатор сеанса генерируется для каждого запроса страницы, пока не будет получен доступ к объекту сеанса.Если вашему приложению требуется статический идентификатор сеанса для всего сеанса, вы можете либо реализовать метод Session_Start в файле приложения Global.asax и сохранить данные в объекте Session для исправления идентификатора сеанса, либо использовать код в другой части вашегоприложение для явного хранения данных в объекте Session.

Если ваше приложение использует состояние сеанса без файлов cookie, идентификатор сеанса генерируется при первом просмотре страницы и поддерживается в течение всего сеанса.

Дело в том, что я не могу использовать состояние сеанса без файлов cookie, потому что мне нужны файлы cookie.

Что я могу сделать, чтобы избежать этой ошибки?Или Что я могу сделать, чтобы избежать изменения Session.SessionID при каждом запросе?

Ответы [ 8 ]

5 голосов
/ 29 февраля 2012

Вы, вероятно, храните свой сеанс InProcess.Попробуйте изменить его на сервер состояний сеанса.Вы можете найти более подробную информацию здесь .

3 голосов
/ 20 января 2015

Я использую средство просмотра отчетов 11.0.0; в вашей веб-конфигурации в разделе system.web укажите следующую конфигурацию:

<sessionState timeout ="120" mode="InProc" cookieless="false" />

Когда вы генерируете отчет (код C # ниже) в объекте reportviewer, измените свойство KeepSessionAlive на false, а свойство AsynkRendering на false, и это все

        this.rvReporte.KeepSessionAlive = false;
        this.rvReporte.AsyncRendering = false;

(rvReporte) - элемент управления ReportViewer, расположенный в моей форме asp.net. Это решение работает для меня, я надеюсь, что это работает для других людей.

С уважением

2 голосов
/ 03 июня 2016

Я решил эту проблему, установив для параметра AsyncRendering значение false на серверном элементе управления Reportviewer

2 голосов
/ 30 октября 2014
<httpCookies httpOnlyCookies="false" requireSSL="false"/>

Решил проблему. Благодаря : http://www.c -sharpcorner.com / Блог / 8786 / ReportViewer-Asp-Net-сеанс имеет-expired.aspx

1 голос
/ 15 мая 2015

У меня была такая же проблема на странице просмотра отчетов, когда к веб-сайту обращались из внешней сети. предложение Хардвина спасло день для меня, который должен установить this.rvReporte.KeepSessionAlive = false; this.rvReporte.AsyncRendering = false;

Я изменил свойство на самом элементе управления. Я использую средство просмотра отчетов на пользовательском элементе управления, который вызывает пользовательское событие для программной подачи параметров на страницу хоста вместо запроса пользователей.

1 голос
/ 05 августа 2013

Ответ, данный Александром, является лишь одним из решений этой проблемы.

Эта ссылка ясно объясняет причину этой проблемы и возможные решения: http://blogs.msdn.com/b/brianhartman/archive/2009/02/15/did-your-session-really-expire.aspx

В случае Брайана, способ, которым он описал проблему, если бы у него был только один сервер IIS, использование объекта сеанса в его коде решило бы проблему, потому что в этом случае SessionID, который передается в запросе от браузера к серверу будет сопоставлен с соответствующим sessionID на сервере, и, следовательно, сообщение об истечении сеанса не придет.

Настройка режима может работать только в случае кластера серверов, где Брайан имел несколько серверов IIS, обрабатывающих один и тот же запрос. В этом случае режим вне процесса поможет извлечь объект сеанса из хранилища сеансов независимо от попадания на сервер.

Итак, основываясь на этом наблюдении, я пришел бы к выводу, что проблема Брайана была связана не с файлами cookie, а с кластером серверов. Информация, предоставленная Брайаном в его вопросе и последующем решении, ввела меня в заблуждение и, следовательно, это разъяснение Надеюсь, это поможет любому, кто ищет подобную проблему.

Спасибо, Vipul

0 голосов
/ 29 апреля 2015

Для меня оказалось, что в пуле приложений было несколько рабочих процессов.

0 голосов
/ 08 августа 2013

Попробуйте удалить SessionState = "somevalue" тег в верхней части вызывающей страницы ASPX.Я использую пользовательский SessionState и отказываюсь использовать InProc, так как у меня есть несколько экземпляров в Azure.Вы даже можете использовать AsyncRendering = True, если хотите.Дайте мне знать, если это помогло вам.

...