we have a problem avec an ASP.NET website où le users' sessions are behaving oddly - session data appearing, disappearing et re-appearing.
Je pense Je sais what le problem is:
Our setup is 2 x Load balanced WebServers + single session state database.
ASP.NET SQL session state storage appears to depend on le IIS Website Instance ID (Metabase ID) to uniquely identify le incoming session cookie ID et retrieve/store values.
The IIS Website Instance ID of le website is différent on chaque of le live servers (ID /W3SVC/1/Root on WebServer A, ID /W3SVC/2/Root on Webserver B).
Load balancing is pas using client affinity so chaque user HTTP request could allez dans soit server.
Par conséquent, as a user logs onto le site et moves around, chaque HTTP call can allez dans soit web server, et hence use a Session State record avec différent IDs depending on le server. In effect le user would simultaneously have 2 separate session instances. Je crois J'ai verified this as in le database ASPStateTempSessions table, chaque session cookie ID seems to correspond to 2 almost-identically named records (their IDs seulement differ by le dernier peu de characters, qui Je crois are a modifier based on le AppID depuis le AspStateTempApplications table) created within seconds of chaque other.
Therefore Session State will appear to misbehave as changes made to one session record will seulement persist against that web server. If le User moves to le autre load-balanced server, session values will seem to disappear ou revert.
Je crois la solution est de synchronise le IIS Instance IDs of le sites (e.g. make them les deux /W3SVC/1/Root), mais J'ai essayé to edit that value in IIS under Advanced Settings, et bien que it saved OK, it juste made le site return 404s on that server jusqu'à I changed it back.
I found a VBS script for this problem mais it seems to be for IIS 6 seulement so Je suis worried about trying it. Has anybody else encountered this situation on IIS 7.5, et how did you fix it?
EDIT / SOLUTION
My mistake was that I forgot to restart IIS après I changed le Site Instance ID in IIS. After this, le ID was updated et ASP.NET sessions were synced on le two web servers.
Full instructions:
Remote Desktop onto server LIVE1, open IIS Mgr, cliquez sur le problem Site et choose Advanced Settings in le sidebar.
Changez le ID to something unique e.g. 10. Click OK.
Redémarrez le web service (c:\windows\system32\iisreset /restart)
Do le même for LIVE2 (ensure le Site ID is le même as on LIVE1)
Note that le site ID does affect le location of site files e.g log file folder would become C:\inetpub\logs\LogFiles\W3SVC10 par exemple.
Note aussi that you could do these changes manually by editing le site id attribute in le IIS config file on chaque server: C:\Windows\System32\inetsrv\config\applicationHost.config . Requires admin privs et encore needs a reset afterwards.