Сеанс ASP.NET истек - Идентификатор события 1309 - PullRequest
1 голос
/ 30 июня 2010

Некоторые подробности:

Я использую ASP.NET 4.0.30319.0 на IIS6.Я хостирую веб-сайт, который содержит ReportViewer уже довольно давно (~ 3 года).В апреле я обновился до версии 4.0, и в течение нескольких месяцев все шло гладко.

Теперь я неожиданно вижу, что на страницах, на которых размещается ReportViewer, возникают довольно большие исключения из-за превышения времени ожидания сеанса.В Event Viewer записано много многих из этих событий, и это скорее ударил или пропустил, когда дело доходит до возможности просмотра страницы.Нажав на страницу один раз, вы можете увидеть сгенерированный отчет.Обновить, и ошибка происходит.Обновите снова, и он вернется ...

Я искал много форумов, пытаясь выяснить проблему - большинство, кажется, рекомендуют изменить настройки сервера SQL (которые я не использую), изменив AsyncRendering = "False", изменение настроек пула приложений или тайм-аут.Я не хочу менять ни один из них, так как он работал только неделю назад, без этой проблемы.

Если не считать Windows Update, или кто-то вносит изменения в сервер без моего ведома, яиз идей ...

Обновление

Я пытался увеличить максимальную виртуальную память в пуле приложений, которая не работала.

1 Ответ

1 голос
/ 02 августа 2010

У меня почти такая же проблема, после обновления до .NET 4.0 и Report Viewer 2010. Я сделал оба обновления одновременно, теперь я не уверен, кто виноват.В моем случае обновление работает, но пользователи сохраняют страницу открытой в течение ночи, а затем нажимают кнопку обновления на следующее утро, когда сеанс уже потерян.Наш пул приложений перезагружается каждую ночь.

Я считаю, что средство просмотра отчетов должно поддерживать сеанс, но это не так.Там нет запроса любого вида от просмотра отчетов.Затем он теряет свое сохраненное состояние по окончании сеанса либо по истечении сеанса, либо после перезапуска приложения.Я также использую InProc, я пытался изменить его, но просмотрщик отчетов не работал с State Server.Позже я попытаюсь снова отойти от InProc.

См. Мой аналогичный вопрос .

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

if (Context.Session != null)
        {
            //Tested and the IsNewSession is more advanced then simply checking if 
            // a cookie is present, it does take into account a session timeout, because 
            // I tested a timeout and it did show as a new session
            if (Session.IsNewSession)
            {
                // If it says it is a new session, but an existing cookie exists, then it must 
                // have timed out (can't use the cookie collection because even on first 
                // request it already contains the cookie (request and response
                // seem to share the collection)
                string cookieHeader = Request.Headers["Cookie"];
                if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0))
                {
                    Response.Redirect(Request.Url.ToString());
                }
            }
        }
...