IIS 7.5 Load-Balanced Server Web masalah Sesi ASP.NET State

14

kami memiliki masalah dengan situs web ASP.NET di mana sesi pengguna bertingkah aneh - data sesi muncul, menghilang dan muncul kembali.

Saya rasa saya tahu apa masalahnya:

  1. Pengaturan kami adalah 2 x Memuat WebServers seimbang + basis data status sesi tunggal.
  2. Penyimpanan keadaan sesi ASP.NET SQL tampaknya bergantung pada ID Instance Situs Web IIS (ID Metabase) untuk secara unik mengidentifikasi ID cookie sesi yang masuk dan mengambil / menyimpan nilai.
  3. ID Instans Situs Web IIS dari situs web berbeda pada setiap server langsung (ID / W3SVC / 1 / Root pada WebServer A, ID / W3SVC / 2 / Root pada Webserver B).
  4. Load balancing tidak menggunakan afinitas klien sehingga setiap permintaan HTTP pengguna dapat masuk ke salah satu server.

Oleh karena itu, ketika pengguna masuk ke situs dan bergerak, setiap panggilan HTTP dapat pergi ke server web mana pun, dan karenanya menggunakan catatan Status Sesi dengan ID yang berbeda tergantung pada server. Akibatnya, pengguna secara bersamaan akan memiliki 2 instance sesi terpisah. Saya percaya saya telah memverifikasi ini seperti pada tabel ASPStateTempSessions database , setiap ID cookie sesi tampaknya sesuai dengan 2 catatan yang hampir identik namanya (ID mereka hanya berbeda dengan beberapa karakter terakhir, yang saya percaya adalah pengubah berdasarkan AppID dari Tabel AspStateTempApplications ) dibuat dalam hitungan detik satu sama lain.

Karenanya Status Sesi akan tampak tidak benar karena perubahan yang dibuat untuk satu catatan sesi hanya akan bertahan terhadap server web itu. Jika Pengguna pindah ke server beban-seimbang lainnya, nilai sesi tampaknya akan hilang atau dikembalikan.

Saya percaya solusinya adalah menyinkronkan ID Instance IIS dari situs (misalnya membuat keduanya / W3SVC / 1 / Root ), tapi saya mencoba mengedit nilai itu di IIS di bawah Pengaturan Lanjut, dan meskipun itu disimpan OK, itu hanya membuat Situs mengembalikan 404 pada server itu sampai saya mengubahnya kembali.

Saya menemukan skrip VBS untuk masalah ini tetapi tampaknya hanya untuk IIS 6 jadi saya khawatir untuk mencobanya. Adakah orang lain yang mengalami situasi ini pada IIS 7.5, dan bagaimana Anda memperbaikinya?


EDIT / SOLUSI

Kesalahan saya adalah saya lupa me-restart IIS setelah saya mengubah ID Instans Situs di IIS. Setelah ini, ID diperbarui dan sesi ASP.NET disinkronkan di dua server web.

Instruksi lengkap:

  1. Remote Desktop ke server LIVE1, buka IIS Mgr, klik pada Situs masalah dan pilih Pengaturan Lanjut di sidebar.
  2. Ubah ID menjadi sesuatu yang unik mis. 10. Klik OK.
  3. Mulai ulang layanan web ( c:\windows\system32\iisreset /restart)

Lakukan hal yang sama untuk LIVE2 (pastikan ID Situs sama dengan di LIVE1)

Perhatikan bahwa ID situs tidak memengaruhi lokasi file situs, misalnya folder file log akan menjadi C:\inetpub\logs\LogFiles\W3SVC10misalnya.

Perhatikan juga bahwa Anda bisa melakukan perubahan ini secara manual dengan mengedit situs id atribut di IIS file konfigurasi pada setiap server: C:\Windows\System32\inetsrv\config\applicationHost.config. Membutuhkan admin privs dan masih perlu diatur ulang sesudahnya.

James McCormack
sumber

Jawaban:

11

Dilihat oleh pertanyaan Anda, sepertinya Anda memiliki server sesi pusat (DB?) Yang melacak data sesi?

Anda juga harus menyinkronkan kunci mesin yang digunakan untuk enkripsi agar otentikasi bentuk apa pun dll berfungsi. Ini mungkin juga mempengaruhi identifikasi sesi, saya tidak yakin.

Mengkonfigurasi Kunci Mesin di IIS 7

Selanjutnya, Anda harus menggunakan konfigurasi bersama antara mesin, itu sendiri mungkin memperbaiki masalah dengan kunci mesin yang berbeda.

Sinkronisasi Konfigurasi IIS untuk Web Server Farm?

EDIT: Ketika Anda mengubah ID situs, apakah Anda mencoba me-restart manajer IIS untuk melihat apakah webroot telah berubah? Mungkin konfigurasi terhubung ke ID yang berarti bahwa perubahan ID juga memodifikasi hal-hal seperti root dokumen dll

jishi
sumber
Terima kasih atas ide-ide Jishi tetapi saya sudah menyinkronkan kunci mesin di web.configs. Saya kira saya benar-benar mencari cara untuk mengubah ID Instans IIS situs tanpa harus sepenuhnya menghapus dan mengkonfigurasi ulang situs di server web.
James McCormack
Ketika Anda mengubah ID situs, apakah Anda mencoba memulai kembali manajer IIS untuk melihat apakah webroot telah berubah? Mungkin konfigurasi terhubung ke ID yang berarti bahwa perubahan ID juga memodifikasi hal-hal seperti root dokumen dll.
jishi
1
Ya, itu dia! Saya lupa me-restart layanan IIS (command line iisreset / restart). Bekerja dengan baik setelah itu! Harap perbarui jawaban Anda dengan info ini dan saya akan memberikan Anda Jawaban yang Diterima.
James McCormack
Dilakukan kesepakatan. Senang itu berhasil untuk Anda.
jishi