Running a Silverlight application in the Google App Engine platform
This post shows you how to host a Silverlight application in the Google App Engine (GAE) platform. You deploy and host your Silverlight application on Google’s infrastructure by creating a configuration file and uploading it along with your application files.
I tested this by uploading an old demo of mine - the four stroke engine silverlight demo. It is currently being served by the GAE over here: http://fourstrokeengine.appspot.com/
The steps to run your Silverlight application in GAE are as follows:
Create an account at http://appengine.google.com/. You are allocated a free quota at signup.
Select “Create an Application”
Verify your account by SMS
Create your application by clicking on “Create an Application”
Pick an application identifier on the next screen. The identifier has to be unique. You will use this identifier when uploading your application. The application you create will by default be accessible at [applicationidentifier].appspot.com. You can also use custom domains if needed (refer to the docs).
Save your application.
We will use the Windows Launcher for Google App Engine tool to upload our apps (it is possible to do the same through command line). This is a GUI for creating, running and deploying applications. The launcher lets you test the app locally before deploying it to the GAE. This tool is available in the Google App Engine SDK.
The GUI is written in Python and therefore needs an installation of Python to run.
Download and install the Python Binaries from here: http://www.python.org/download/
Download and install the Google App Engine SDK from here: http://code.google.com/appengine/downloads.html
Run the GAE Launcher. Select Create New Application.
On the next dialog, give your application a name (this must match the identifier we created earlier)
For Parent Directory, point to the directory containing your Silverlight files. Change the port if you want to. The port is used by the GAE local web server. The server is started if you choose to run the application locally for testing purposes. Hit Save.
Configure, Test and Upload
As shown below, the files I am interested in uploading for my Silverlight demo app are
- The html page used to host the Silverlight control
- The xap file containing the compiled Silverlight application
- A favicon.ico file.
We now create a configuration file for our application called app.yaml. The app.yaml file specifies how URL paths correspond to request handlers and static files. We edit the file by selecting our app in the GUI and clicking “Edit”
The contents of file after editing is shown below (note that the contents of the file should be in plain text):
- url: /
- url: /favicon.ico
- url: /FourStrokeEngine.xap
- url: /.*
We have listed URL patterns for our files, specified them as static files and specified a mime type for our xap file. The wild card URL at the end will match all URLs that are not found to our default page (you would normally include a html file that displays a 404 message). To understand more about app.yaml, refer to this page. Save the file.
Run the application locally by selecting “Browse” in the GUI. A web server listening on the port you specified is started (8080 in my case). The app is loaded in your default web browser pointing to http://localhost:8080/. Make sure the application works as expected.
We are now ready to deploy. Click the “Deploy” icon. You will be prompted for your username and password. Hit OK. The files will get uploaded and you should get a dialog telling you to “close the window”.
We are done uploading our Silverlight application. Go to http://appengine.google.com/ and launch the application by clicking on the link in the “Current Version” column.
You should be taken to a URL which points to your application running in Google’s infrastructure : http://fourstrokeengine.appspot.com/.
We are done deploying our application!
Clicking on the link in the Application column will take you to the Admin console where you can see stats related to system usage.
To learn more about the Google Application Engine, go here: http://code.google.com/appengine/docs/whatisgoogleappengine.html