A few years back I made a web app which would allow a user to interact with a shell over the web. The trick was to leave a hanging web request to allow the shell output to be redirect to the browser in an open stream. When the browser receives a whole script block it executes it then, so you can push updates to the browser before the response is ended. The input from the user is sent to the server by posts with javascript where the server then sends the input to the shell in the other response while its running. The whole application is self contained within a single aspx page which will run under 1.0, 1.1, 2.0 or 3.5.