Hi Guys,

Just wanted to check out if anyone can help me out in one of the typical scenarios that I have…

The scenario is that of a typical Zero Down Time Updates (100% availability…) on a (ASP.Net 2.0 on IIS 6.0) production site with multiple tiers involved – F5 Balanced Web Farm, SQL cluster,( Biztalk 2004 Farm & Citrix Farm, etc ,which can be ignored for now )..

We have managed to find a strategy to deploy the updates - starting with SQL Cluster followed by Web Farm Tier., assuming the updates to the SQL cluster will be necessarily backwards compatible with the earlier version of the application.

The strategy to update the Web Tier is holding us up due to few issues as mentioned below. The steps we are following is typically explained below :
1. Firstly, isolate any one node in the web farm, by setting up Node drain out feature in F5.
2. Once the node is isolated, deploy the new version of the application/site on the node.
3. Introduce the updated Node back into the farm so that it again starts receiving the requests from the load balancer.
4. Follow the same steps from 1-3 till all the nodes in the farm are updated

Now this leads us to the situation where :
1. the farm now has two versions of the application running side-by-side, (updated node has latest version of the application along with updates business components ,while the other nodes still have older version.. ),
2. there is possibility of the new node(new application) receiving a request which is essentially the post-back request from the user who was earlier serviced by the older version of the application & vice-versa.
3. assuming, at the new node, we figure out that postback request corresponds to the older version, we can think of forwarding the request back to any of the other nodes still having the earlier version of the application (if possible at all in a load balanced web farm? I assume this my cause performance hits on the node which was directed to..)
4. need to figure out a solution wherein after detecting that postback request was meant for an earlier version of the application, somehow trigger a postback again , thereby ensuring that Load balancer will this time, route it to some other node – WITH ALL THE VIEWSTATE & POSTBACK DATE (ALSO THE RAISED POSTBACK EVENTS) intact, so that , finally the request will be executed in the way intended without any loss of data & yet happening transparently to the user.
5. need to achieve this without any change to the existing code – Cross Page Post back, Server.Transfer & even the Response.Redirect don’t seem to help as the postback data & viewstate won’t be preserved. Besides even to Cross Postback, would imply posting back by only those controls supporting with PostBackURL property (i.e. implementing IButtonControl interface), whereas the existing code might have custom controls as well…

I would truly appreciate if someone can suggest a solution or even better alternatives.