views:

44

answers:

3

I'm working on an ASP.NET MVC web application that will be deployed across multiple load-balanced servers. With this setup, a user might have one request served by server A and the next request will be served by ServerB or ServerC.

We don't want to store Session Data in the database, as we're trying to minimise database hits where ever possible. As such, we need to have the HttpSession managed and stored on another server.

My understanding is that this is possible by using a Windows Service that will manage this for me, but I'm unfamiliar with how to implement this. Can somebody point me at some good documentation on how to do this? Or any pitfalls or other points to take into consideration? Thanks

+3  A: 

You need to dedicate a machine that will host the Windows NT service and which must have .NET installed (well you could use one of the web servers as state server but IMHO this would be a very bad idea):

net start aspstate

And then instruct your application to use this server:

<system.web>
  <sessionstate 
      mode="stateserver"
      cookieless="false" 
      timeout="20" 
      server="127.0.0.1" 
      port="42424" 
  />
</system.web>

where of course you would replace 127.0.0.1 with the IP address of the server hosting the NT service.

Note1: don't forget to decorate the objects you intend to store into session with the [Serializable] attribute.

Note2: this is a good solution in a load balanced environment but if you are looking for a real failover clustering you should use SQL server.

You may read more details about ASP.NET session state on MSDN.

Darin Dimitrov
Hi Darin, thanks for this. I have a question though. I understand the point of decorating the objects with [Serializable], but in our case, we're only going to be storing ints and strings in the session (for instance, we'll store a siteId that is associated with a user). Can these just go straight in?
DaveDev
@DaveDev, yes ints and strings are serializable.
Darin Dimitrov
DaveDev
A: 

As usual, Peter gives this issue good coverage...

http://www.eggheadcafe.com/articles/20021016.asp

Sky Sanders
A: 

Another alternative you may want to consider is Memcached Providers - it allows you to store session state in a memcached instance; optionally using SQL Server as a fallback. The best of both worlds, IMHO.

DanP