In a past interview, I was asked how would I write a mission critical windows service which must maintain 100% uptime, be very responsive, and also be updatable. The service was described as a remoting based application which takes in requests, performs calculations and sends a response back.
My solution was to have a very generic service which simply acts as a gateway. This service would never be stopped. It would queue up the requests and forward them on to another service in a separate app domain which would actually handle the request. There would need to be at least two of these handling services so one could be brought down to be updated while the other would responded to incoming requests. The interfaces between the services would include an ability to handshake to see if a service was running. A very small timeout would exist so if a service was completly out it wouldn't hold the request up. I also emphasized the point that this solution could scale out well as you could add more of these services on different boxes.
The interviewer wasn't too crazy about this idea because of issues around latency between communicating across app domains and even across the network. I stated for a mission critical application you should set up a rock solid infrastructure as software alone can't be the answer. He also said they currently have a system in place using relfection. I thought about loading assemblies into an app domain and watching a directory for assembly changes, but this seems way too error prone.
Has anyone build anything with similar requirements? What solutions did you use? What doesn't work? Is reflection a usable option?