2010-09-27 5 views
4

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

Мой сервер приложений работает под управлением 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 requiresFullReportLoad) в Microsoft.Reporting.WebForms.HttpHandler.GetHandler (Строка operationType) в Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest (HttpContext контекст) в системе .Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpAppli cation.IExecutionStep.Execute() на System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, булева & completedSynchronously)

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

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

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

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

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

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

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

ответ

2

Я смог решить обе проблемы.

Вторая проблема (необходимость входа в систему дважды) больше не воспроизводима. Я перерегистрировал 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.

Смежные вопросы