IsPostBack имеет значение false при переносе на другой сервер в ферме серверов?

У меня есть веб-сайт asp.net, который развернут на двух серверах. Перед серверами находится балансировщик нагрузки, который распределяет запросы на два сервера. Для хранения сессии мы используем SQL Server. Моя проблема в том, что если пользователь перейдет на страницу, нажмет кнопку, а затем балансировщик нагрузки перенаправит его на другой сервер, этот запрос не будет распознан как обратная передача? Почему это так, разве это не должно нормально работать даже с обратными передачами, если серверы используют одни и те же машинные ключи?

Подробности:

  1. На обоих серверах настроен один и тот же машинный ключ, и я проверил, что фактический сеанс одинаков на обоих серверах, с помощью небольшой страницы отладки, которую я сделал, которая устанавливает и распечатывает объект сеанса.

  2. Для дальнейшей проверки ключей и идентификатора я распечатал значения HttpRuntime.AppDomainAppId и хешированного машинного ключа (MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey"), а также sessionId Session.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
    
  3. Идентификатор сайта, найденный в IISMgr в разделе «Дополнительные настройки» на сайте, одинаков на всех серверах.

  4. Пока я остаюсь на том же сервере, все работает как положено.

  5. Когда я запускаю страницу локально (сначала запрашиваю веб-ферму, затем перенаправляю второе нажатие кнопки на локальный хост с помощью скрипача), я получаю такое же поведение.

  6. Просматривая код и читая свойство IsPostBack, кажется, моя проблема в том, что this._fPageLayoutChanged на странице верно. Однако, если я правильно понимаю, это должно быть ложным, когда происходит обратная передача? SO Вопрос о его реализации

  7. Оба сервера работают под управлением IIS 7.

  8. Оба сервера работают под управлением Windows Server Web с пакетом обновления 2 (SP2) и одними и теми же установленными обновлениями Windows. С другой стороны, моя локальная машина разработки работает под управлением Windows 7.


person viblo    schedule 20.07.2012    source источник
comment
проверьте, включен ли липкий сеанс в балансировщике нагрузки.   -  person NoviceProgrammer    schedule 20.07.2012
comment
Это имеет значение? Имея один и тот же машинный ключ на обоих серверах и сохраняя сеанс в базе данных, я думал, что ASP.Net будет все равно, какой сервер обработает запрос?   -  person viblo    schedule 20.07.2012
comment
Извините, я неправильно понял вопрос... IsPostback не должен становиться ложным   -  person NoviceProgrammer    schedule 20.07.2012


Ответы (1)


Оказывается, добавление ручного ввода Machinekey в web.config решило проблему. Очень странно, поскольку я проверил его глобальное значение, а также хеш, как указано в вопросе, но теперь он работает.

Я беру это обратно. После нашего последнего релиза проблема вернулась, поэтому добавление машинного ключа совсем не помогло.

person viblo    schedule 17.09.2012