I’ve been playing around trying to build up a sample application on Microsoft Azure to prove out how I’d build a distributed system. It’s still a work in progress (here’s hoping I actually blog it all the way through), but that’s not the point of this post.
Microsoft has provided an emulator that allows you to do a lot of things in your development environment without actually deploying to Azure. This is great when you are trying to figure things out and don’t have a lot of confidence that you are doing things right. The deploy to the emulator is a but faster (especially if you have an SSD) and you don’t have to worry about spending any money on a runaway process that you forgot to shut down.
This emulator has some fairly significant problems, however. The big obvious one is that it doesn’t support Azure Service Bus. You would think you can get around this by using Windows Service Bus, but I could not get web/worker roles in the emulator to see the instance of WSB on my machine. You can use an ASB hosted on Azure from the emulator, however. This can be tricky once you start sharing the codebase with others, of course, since you need to keep your connection info out of the source repository.
Another significant problem is that the emulator can’t use the latest version of the Azure libraries. It lags and so you have to find out how far behind, and then play NuGet magic to get the right versions. It’s not hard, but it’s a pain. Obviously this also prevents you from testing any new features of Azure, but for my purposes this hasn’t been a problem.
A workaround suggested to me by Chris Patterson would be to install the Azure dev environment on your machine (or go full bore and stand up a full Azure environment in your data center, which might be a good long term solution for development), but that was just more effort than I want to put in at this point.
The bottom line, if you are going to only use web/worker roles and the storage account features, you can make use of the emulator to get a proof of concept working on your machine, but if you want to really use it you need to deploy to Azure.