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, если хотите. Дай мне знать, если это поможет тебе.