Building Windows Azure Cloud Service Applications with Azure Storage and the Azure SDK

Introduction

Windows Azure and Azure Storage offers a new scalable and
robust architecture that borrows much from the common feel
of ASP.NET applications but brings plenty of new features as
well. This paradigm shift from what has become traditional
client-server architecture will offer new options to
developers and headaches alike. While “the cloud” is not
intended to be the answer for all applications and
situations, it can only be a potential answer (another
“tool” in the proverbial “tool belt”) if you have at minimum
a general understanding.

The following will provide you with a walkthrough
experience of a cloud architected application. It will
explore how to build a multi-role cloud service that uses
two new Azure Storage services, Tables and Queues by
covering the following:


  • Creating a Windows Azure application with a Web Role and Worker Role
  • Azure Storage

    • Set up configuration files with account information
    • Using a Table to store and retrieve data
    • Using a Queue to send messages to the Worker Role

  • Using the Azure SDK StorageClient project for Table and Queue interaction

If you are planning on following along with the code
examples in your own environment here are the prerequisites
you will need installed:

Important: Installing Windows Azure Tools for Visual
Studio requires Vista SP1 or greater; Windows XP will not
allow installation.

The below code and screen shots are based on the July
2009 CTP of Azure and are subject to change before the
production release. Please consult up-to-date documentation
after the release if certain functionality no longer works
or has been changed.

The application built in the following walkthrough uses
one Web Role to take two numeric inputs from a user and
allows that user to come back later to view the results of
adding them together. A Worker Role will be used to pick up
a Queue message, retrieve the two inputs and add them
together, storing the results back to Table storage. While
using a Worker Role for simple addition is overkill, it will
demonstrate all the necessary steps to architect your cloud
application to maintain user interface responsiveness and
scalability.

Creating a Windows Azure application

Before opening Visual Studio you’ll have to get in the
habit of running it as an Administrator when working on
Azure projects. The Azure development fabric and storage,
which comes with the Azure tools for VS, requires
Administrative rights when you go to debug your application.
You can think of the development fabric and storage as your
own little mock cloud running locally.

In Visual Studio, after installing the Azure tools for
VS, you will have a new project type option of “Cloud
Service” with one template to pick. Give the project a name
as you would with any new project,
MyCouldService” for this example.

>
Figure 1.1 New Cloud Service

When you click OK, Visual Studio launches a wizard
interface that allows you to add the following Roles to the
Cloud service project.

Each role added will create a separate project file in
the Visual Studio Solution Explorer. Before clicking OK you
have the ability to rename each role by clicking on the
pencil icon to the right of the role’s name. This is useful
when you have multiple Web or Worker roles that will be
designated to perform different functions.


Figure 1.2 Creating and Naming Cloud Service Roles

Click OK to finish the wizard. In the Solution Explorer
window you will notice that in addition to the two role
projects you added in the wizard there is a third project
for the cloud service. Each cloud service solution has this
additional project that contains the
ServiceDefinition and
ServiceConfirmation files. These files control
the number of instances Azure will start of each of the role
and Azure storage configuration among other things.

Since we will be using Azure Table and Queue storage open
both the ServiceDefinition and
ServiceConfirmation files and add the following
to each respective file.

ServiceDefinition.csdef


<?xml version=”1.0″ encoding=”utf-8″?>
<ServiceDefinition name=”MyCloudService” >
<WebRole name=”MyAppWebRole” enableNativeCodeExecution=”false”>
<InputEndpoints>
<!– Must use port 80 for http and port 443 for https when running in the cloud –>
<InputEndpoint name=”HttpIn” protocol=”http” port=”80″ />
</InputEndpoints>
<ConfigurationSettings>
<Setting name=”AccountName” />
<Setting name=”AccountSharedKey” />
<Setting name=”QueueStorageEndpoint” />
<Setting name=”TableStorageEndpoint” />
</ConfigurationSettings>
</WebRole>
<WorkerRole name=”MyAppWorkerRole” enableNativeCodeExecution=”false”>
<ConfigurationSettings>
<Setting name=”AccountName” />
<Setting name=”AccountSharedKey” />
<Setting name=”QueueStorageEndpoint” />
<Setting name=”TableStorageEndpoint” />
</ConfigurationSettings>
</WorkerRole>
</ServiceDefinition>

ServiceConfiguration.cscfg


<?xml version=”1.0″?>
<ServiceConfiguration serviceName=”MyCloudService”
>
<Role name=”MyAppWebRole”>
<Instances count=”1″ />
<ConfigurationSettings>
<Setting name=”AccountName” value=”devstoreaccount1″ />
<Setting name=”AccountSharedKey”
value=”Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==” />
<Setting name=”QueueStorageEndpoint” value=”http://127.0.0.1:10001″ />
<Setting name=”TableStorageEndpoint” value=”http://127.0.0.1:10002″ />
</ConfigurationSettings>
</Role>
<Role name=”MyAppWorkerRole”>
<Instances count=”1″ />
<ConfigurationSettings>
<Setting name=”AccountName” value=”devstoreaccount1″ />
<Setting name=”AccountSharedKey”
value=”Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==” />
<Setting name=”QueueStorageEndpoint” value=”http://127.0.0.1:10001″ />
<Setting name=”TableStorageEndpoint” value=”http://127.0.0.1:10002″ />
</ConfigurationSettings>
</Role>
</ServiceConfiguration>

For development the AccountName and
AccountSharedKey values are fixed to what is
shown above(When working with the development environment
you must use that name and key). This allows you to test
your authentication code when accessing and storing data in
Azure Storage.

More by Author

Must Read