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:
- Pengaturan kami adalah 2 x Memuat WebServers seimbang + basis data status sesi tunggal.
- 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.
- 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).
- 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:
- Remote Desktop ke server LIVE1, buka IIS Mgr, klik pada Situs masalah dan pilih Pengaturan Lanjut di sidebar.
- Ubah ID menjadi sesuatu yang unik mis. 10. Klik OK.
- 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\W3SVC10
misalnya.
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.