Cook your own VMware AppBlast

Wrote this article almost 6 months ago…finally got around to finishing it–Let me know what you think!

“Project AppBlast will provide the universal delivery of any application, including Windows-based applications, to any off-the-shelf browser or device supporting HTML 5, enabling instant remote access to non-HTML based applications.”

We discussed this at work the other day and we were excited at the possibilities with AppBlast, but since it’s not here now we’ll have to wait for a released product.  One of my co-workers Chad Wintzer said well why wait?  We dug around and came up with a working solution–and a damn good one after a few evenings grinding away at this.  Having a fair amount of RDS experience already this is what we came up with:

Backend

The backend infrastructure is provided by Microsoft’s Remote Desktop Services: RemoteApp.  This feature was introduced in Windows Server 2008 and was improved upon even more in the R2 release.  What RemoteApp allows you to do is run applications on backend RDS (TS) servers, and establish an RDP session from a user to just that app.  The user is presented with a window over their local desktop and functions just about as if it was actually installed and running off the local desktop.  Users can run multiple applications in parallel and so long as the app behaves well in a RDS environment you can host 1 installation with multiple users.  The servers that run RemoteApps are called RD Session Hosts, to scale you can simply throw a bunch of RD Session Hosts together and strap a load balancer on top, however you will want to use RD Connection Broker(s) in place of a traditional load balancer to keep track of user sessions.  The Connection Broker(s) manage session information such as RD Session Host server, session state, session ID, and the user associated with the aforementioned bits.  For the security junkies it’s worth noting that RemoteApp is AD integrated so you can restrict access to various apps via Security Groups.  This was something added in R2 I believe as many folks were complaining about this when RemoteApp first came out.

If you don’t want to go that route you can look at Citrix’s XenApp offering, but we found RDS: RemoteApp performed exactly as we needed it to.

Troubleshooting Broken Apps in RDS

Keep in mind if you are having trouble getting an application to play nice in your RDS environment you can take advantage of various application virtualization technologies to sandbox them.  Once sandboxed they almost always seem to work–your choices are:

Frontend

So now that you have your backend sorted out, lets talk frontend.  You have a few options:

Of the 3, we chose RemoteSpark’s Spark View due to the fact it was easy to customize and the developers were very responsive —   Now I really have to hand it to Walter Wang, this is an awesome application and it’s even more amazing in that he released a free version for folks to play with.
Spark is setup in 2 parts–first the Gateway Server, this essentially translates HTML5 Web Sockets to RDP.  This is a daemon that will listen by default on port 80 for web socket requests from the web frontend.   The web frontend is the 2nd part, and is just the static HTML and associated images, js, etc.  You’ll need to drop those bits on a web server.
Now you can give it a go and test out Spark, RDP to a host and see that it works.  Go on, try it from an iPad, Android device or BlackBerry Playbook (if your an unfortunate owner).
If you don’t have a HTML5 browser installed (modern versions of Chrome, Firefox, Safari, etc.) give Chrome Frames a go if your a windows user.  This neat little extension will embed Chrome inside of IE, very nice for corporate environments were end users can be confused having multiple browsers.
Here is a diagram of what exactly is happening (with redundancy of course):
Ok, so how does this become AppBlast your asking?
RemoteSpark lets you drag and drop a .rdp file–so drag and drop a .rdp file from a RemoteApp.
So you can write up a bit of code in PHP or something else to handle this dynamically on the server side, but for Proof of Concept sake here is a static page you can get started with (make sure you update the commented configuration area for your environment:

So now that you’ve Cooked your own AppBlast, why not take on cooking your own Horizon Application Manager?

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.