Проблемы с сеансами ASP.NET на рабочем сервере - PullRequest
4 голосов
/ 28 сентября 2010

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

Мой сервер приложений работает под управлением Windows Server 2003и является публичным.Веб-приложение ASP.NET работает в .NET 3.5 и использует (частный) SQL Server (2008) в локальной сети.На сервере, на котором работает SQL Server, также размещаются службы отчетов SQL Server, которые используются в нашем веб-приложении через страницу, содержащую элемент управления MS ReportViewer.

Приложение, используемое для работы с .NET 1.1, в прошлом году было перенесено на 3.5.База данных была SQL Server 2000, и она была обновлена ​​в отдельном выпуске в начале этого года.

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

Обе проблемы касаются потери пользовательских сеансов.

Первая возникает в отчетах и ​​запускается в элементе управления ReportViewer.Нечасто наши пользователи будут пытаться манипулировать отчетом (я нашел один воспроизводимый случай для конкретного пользователя и комбинации отчетов - всегда возникает исключение, когда я пытаюсь изменить страницы отчета).

Стек вызовов исключенийвыглядит следующим образом:

Microsoft.Reporting.WebForms.AspNetSessionExpiredException: истек срок сеанса ASP.NET или его не удалось найти в Microsoft.Reporting.WebForms.ViewerDataOperation..ctor () в Microsoft.Reporting.WebForms.ReportDataOperation..ctor (Boolean requiredFullReportLoad) в Microsoft.Reporting.WebForms.HttpHandler.GetHandler (String operationType) в Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest (контекст HttpContext.Web.Sec..HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логический и завершенный синхронно)

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

Я создалновый пул приложений в IIS, который настроен на перезапуск рабочих процессов каждые 10000 запросов, а также в 2 часа ночи.(Правило запроса 10000 - это старое решение для решения проблемы, которая может существовать или не существовать - эта проблема и информация о ней предшествуют мне, и я не склонен экспериментировать с ней) На вкладке «Производительность» указано максимальное количество рабочих.для процессов установлено значение 1.

Единственное исправление, которое я мог придумать, состояло в том, чтобы следовать тому, что говорили пользователи ReportViewer, и это переключать режим сервера состояний из InProc для использования внепроцессногомодель сериализации.Я выбрал ASP.NET State Server.

Он прекрасно работает на любом сервере, кроме производственного.Когда я включил его на производстве, у каждого пользователя был такой опыт:

1) Нажмите на страницу входа, введите учетные данные, войдите в систему 2) Нажмите любую ссылку на домашней странице 3) Загрузитесь обратно, чтобы войти в экран.Повторно введите учетные данные, войдите в систему. 4) Теперь сайт работает нормально, пока пользователь не выйдет из системы.

Еще раз, эта проблема существовала только на этом производственном сервере и не была воспроизведена на моем компьютере разработчика, нашем тестовом сервере.или наш общедоступный демонстрационный сервер.

Они связаны?Может быть, а может и нет.С таким небольшим количеством полезной диагностической информации у меня осталось мало идей.Если кто-нибудь ударит по чему-либо подобному или у меня появится идея нового пути, я смогу пойти по нему, я очень ценю это.

1 Ответ

2 голосов
/ 29 сентября 2010

Мне удалось решить обе проблемы.

Вторая проблема (необходимость входа в систему дважды) больше не воспроизводилась. Я перерегистрировал ASP.NET (aspnet_regiis) при попытке другого исправления, которое может исправить, или другое несвязанное изменение конфигурации сделало это.

Основная проблема - ошибка в элементе управления ReportViewer. По какой-то причине ASP.NET начал регистрировать больше исключений, приведших к тому, о котором я сообщил, и я получил подсказку об основной причине, которая описана в этой проблеме Connect:

https://connect.microsoft.com/VisualStudio/feedback/details/556989/blank-gif-resource-generates-server-error-in-reportviewer-in-non-ie-browsers?wa=wsignin1.0#tabs

Я также опубликовал обходной путь. Это ошибка в веб-сервисе, который передает ReportViewer. Ошибка была вызвана только браузерами не IE.

...