ASP.NET сеанс истек или не может быть найден - > потому что сеанс.Изменения SessionID (службы Reporting Services)

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

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

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

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

Если приложение использует состояние сеанса cookieless, идентификатор сеанса создается на первой странице и поддерживается для вся сессия.

дело в том, что я не могу использовать состояние сеанса cookieless, потому что мне нужны куки.

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

8 ответов


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


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

<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 опалубка Это решение работает для меня, я надеюсь, что работа для других люди.

в отношении


<httpCookies httpOnlyCookies="false" requireSSL="false"/>

решена проблема. Благодаря : http://www.c-sharpcorner.com/Blogs/8786/reportviewer-Asp-Net-session-has-expired.aspx


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


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

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

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

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

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

спасибо, Випул!--1-->


У меня была такая же проблема на странице просмотра отчетов, когда веб-сайт был доступен из внешней сети. предложение hardvin Спас день для меня, чтобы установить этот.rvReporte.KeepSessionAlive = false; этот.rvReporte.Значением свойства asyncrendering = ложь;

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


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


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