У меня есть веб-сайт asp.net, который развернут на двух серверах. Перед серверами находится балансировщик нагрузки, который распределяет запросы на два сервера. Для хранения сессии мы используем SQL Server. Моя проблема в том, что если пользователь перейдет на страницу, нажмет кнопку, а затем балансировщик нагрузки перенаправит его на другой сервер, этот запрос не будет распознан как обратная передача? Почему это так, разве это не должно нормально работать даже с обратными передачами, если серверы используют одни и те же машинные ключи?
Подробности:
На обоих серверах настроен один и тот же машинный ключ, и я проверил, что фактический сеанс одинаков на обоих серверах, с помощью небольшой страницы отладки, которую я сделал, которая устанавливает и распечатывает объект сеанса.
Для дальнейшей проверки ключей и идентификатора я распечатал значения
HttpRuntime.AppDomainAppId
и хешированного машинного ключа(MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey")
, а также sessionIdSession.SessionID
и получил одинаковый результат на обоих серверах. Я использовал страницу отладки сеанса. в качестве основы для этого. Его вывод выглядит примерно так (я заменил свой фактический хэш машинного ключа и идентификатор сеанса фиктивными значениями):Current DataTime: 2012-07-20 10:52:58 Current Session Mode: SQLServer HttpRuntime.AppDomainAppId: /LM/W3SVC/5/ROOT Hashed with the MachineKey: HjtOPW5dfoihdlkd+SdsfkEWfs0= Local Machine Name: 127.0.0.1 Current Session ID: 2alsudhsdkjlhcmnsdfkhsdf
Идентификатор сайта, найденный в IISMgr в разделе «Дополнительные настройки» на сайте, одинаков на всех серверах.
Пока я остаюсь на том же сервере, все работает как положено.
Когда я запускаю страницу локально (сначала запрашиваю веб-ферму, затем перенаправляю второе нажатие кнопки на локальный хост с помощью скрипача), я получаю такое же поведение.
Просматривая код и читая свойство
IsPostBack
, кажется, моя проблема в том, чтоthis._fPageLayoutChanged
на странице верно. Однако, если я правильно понимаю, это должно быть ложным, когда происходит обратная передача? SO Вопрос о его реализацииОба сервера работают под управлением IIS 7.
Оба сервера работают под управлением Windows Server Web с пакетом обновления 2 (SP2) и одними и теми же установленными обновлениями Windows. С другой стороны, моя локальная машина разработки работает под управлением Windows 7.