Проблема стану сеансу ASP.NET для веб-сервера, збалансованого навантаженням


14

у нас є проблема з веб-сайтом ASP.NET, де сеанси користувачів ведуть себе дивно - дані сеансу з'являються, зникають і повторно з’являються.

Я думаю, я знаю, в чому проблема:

  1. Наша установка - 2 х завантаження збалансованих веб-серверів + база даних про один сеанс.
  2. Схоже, зберігання стану сеансу ASP.NET SQL залежить від ідентифікатора ідентифікатора веб-сайту IIS (ідентифікатор метабази), щоб однозначно ідентифікувати вхідний файл cookie сеансу та отримати / зберегти значення.
  3. Ідентифікатор ідентифікатора веб-сайту IIS різний на кожному з прямих серверів (ID / W3SVC / 1 / Root на WebServer A, ID / W3SVC / 2 / Root на веб-сервері B).
  4. Балансування завантаження не використовує спорідненість з клієнтом, тому кожен HTTP-запит користувача може перейти на будь-який сервер.

Тому, коли користувач заходить на сайт і переміщається, кожен виклик HTTP може переходити на будь-який веб-сервер, а отже, використовувати запис про стан сеансу з різними ідентифікаторами залежно від сервера. Насправді користувач одночасно матиме два окремі екземпляри сеансу. Я вважаю, що я перевірив це як у таблиці бази даних ASPStateTempSessions, схоже , що кожен файл cookie сеансу відповідає двом майже однаково названим записам (їхні ідентифікатори відрізняються лише останніми декількома символами, які, на мою думку, є модифікатором на основі AppID від Таблиця AspStateTempApplications ) створена протягом секунд один від одного.

Тому, здається, стан сесії погано поводиться, оскільки зміни, внесені до одного запису сеансу, зберігатимуться лише щодо цього веб-сервера. Якщо Користувач переходить на інший сервер, збалансований навантаженням, значення сеансу, здається, зникнуть або повернуться назад.

Я вважаю, що рішення полягає в тому, щоб синхронізувати ідентифікатори інстанцій IIS сайтів (наприклад, зробити їх обома / W3SVC / 1 / Root ), але я спробував відредагувати це значення в IIS в розділі Розширені налаштування, і, хоча це було збережено ОК, він просто зробив повернення сайту 404 на цьому сервері, поки я не змінив його назад.

Я знайшов сценарій VBS для цієї проблеми, але, здається, це стосується лише IIS 6, тому я переживаю, щоб його спробувати. Хто-небудь ще стикався з цією ситуацією на IIS 7.5, і як ви її виправили?


РЕДАКЦІЯ / РІШЕННЯ

Моя помилка полягала в тому, що я забув перезапустити IIS після того, як змінив ідентифікатор ідентифікатора сайту в IIS. Після цього ідентифікатор було оновлено та сеанси ASP.NET були синхронізовані на двох веб-серверах.

Повні інструкції:

  1. Віддалений робочий стіл на сервері LIVE1, відкрийте IIS Mgr, клацніть на проблемному сайті та виберіть Додаткові налаштування на бічній панелі.
  2. Змініть ідентифікатор на щось унікальне, наприклад 10. Натисніть кнопку ОК.
  3. Перезапустіть веб-сервіс ( c:\windows\system32\iisreset /restart)

Зробіть те ж саме для LIVE2 (переконайтеся, що ідентифікатор сайту такий самий, як у LIVE1)

Зауважте, що ідентифікатор сайту впливає на розташування файлів сайту, наприклад, наприклад, стане папка файлів журналу C:\inetpub\logs\LogFiles\W3SVC10.

Відзначимо також , що ви могли б зробити ці зміни вручну шляхом редагування сайту ID атрибута в IIS файл конфігурації на кожному сервері: C:\Windows\System32\inetsrv\config\applicationHost.config. Потрібні адміністративні приватні особи та все ще потребують скидання після цього.

Відповіді:


11

Судячи з вашого запитання, здається, у вас є центральний сервер стану сеансу (БД?), Який відстежує дані сеансу?

Ви також повинні синхронізувати машинний ключ, який використовується для шифрування для роботи будь-якої форми автентифікації тощо. Це також може вплинути на ідентифікацію сеансу, я не впевнений.

Налаштування машинних ключів в IIS 7

Крім того, ви повинні використовувати спільну конфігурацію між машинами, це може само вирішити проблему за допомогою різних ключів машини.

Синхронізація конфігурації IIS для ферми веб-сервера?

РЕДАКТУВАННЯ: Коли ви змінили ідентифікатор сайту, ви намагалися перезапустити менеджер IIS, щоб побачити, чи змінилася веб-версія? Можливо, конфігурація підключена до ідентифікатора, що означає, що зміна ідентифікатора також змінює такі елементи, як корінь документа тощо


Дякую за ідеї, Джиші, але я вже синхронізував machineKey у web.configs. Я думаю, що я дійсно дивлюсь на спосіб зміни ідентифікатора Ідентифікатора IIS сайту без необхідності повністю видаляти та переналаштовувати сайти на веб-серверах.
Джеймс Маккормак

Коли ви змінили ідентифікатор сайту, ви намагалися перезапустити менеджер IIS, щоб побачити, чи змінилася веб-коренева коробка? Можливо, конфігурація підключена до ідентифікатора, що означає, що зміна ідентифікатора також змінює такі
елементи,

1
Так, це було! Я забув перезапустити службу IIS (командний рядок iisreset / restart). Після цього добре працювали! Будь ласка, оновіть вашу відповідь з цією інформацією, і я дам вам прийнятий відповідь.
Джеймс Маккормак

Справу зроблено. Радий, що це вийшло для вас.
jishi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.