Windows Azureアプリケーションを作成する
Azureプロジェクトを扱う場合は、Visual Studioを常に管理者として起動する習慣を身につける必要があります。Azure tools for VSに同梱されているAzureの開発ファブリック(Development Fabric)と開発ストレージ(Development Storage)では、アプリケーションのデバッグの際に管理者権限を必要とします。開発ファブリックと開発ストレージは、ローカルで動作する、ユーザー独自の小さなクラウドのようなものだと考えることができます。
Azure tools for VSをインストールすると、Visual Studioに、1つのテンプレートを含む「Cloud Service」という新しいプロジェクトタイプが追加されます。通常の新規プロジェクトの作成時と同様に、プロジェクトに名前を付けます。ここではプロジェクト名を、「MyCouldService」とします。

[OK]をクリックすると、Visual Studioはウィザードインターフェースを起動します。このウィザードインターフェースを使って、以下のRoleをCloud Serviceプロジェクトに追加できます。
| Role | Description |
| ASP.NET Web Role | A basic ASP.NET project type. Anything that runs in a standard IIS ASP.NET web site should work in Azure. |
| Worker Role | Similar to a Windows service. Once deployed to Azure it is started andis only stopped when required. |
| CGI Web Role | Allows any FastCGI application,like PHP,to be run in Azure. |
追加したRoleごとに、Visual Studio Solution Explorerにそれぞれ別個のプロジェクトファイルが作成されます。[OK]をクリックする前に、各Roleの名前の右にある鉛筆アイコンをクリックすることで、Role名を変更できます。これは、異なる機能を実行する複数のWeb RoleやWorker Roleが存在する場合に便利です。

[OK]をクリックしてウィザードを終了します。[Solution Explorer]ウィンドウを見ると、ウィザードで追加した2つのRoleプロジェクトの他に、3つ目のプロジェクトがあることに気付くでしょう。どのCloud Serviceソリューションにも、ServiceDefinitionとServiceConfirmationという2つのファイルを含む、3つ目のプロジェクトが追加されます。これらのファイルは、Azureが起動する各Roleのインスタンス数や、Azureストレージ設定などを制御するものです。
今回は、AzureのTableストレージとQueueストレージを使用するつもりなので、ServiceDefinitionとServiceConfirmationの両方のファイルを開き、それぞれに以下のコードを追加します。
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyCloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<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>
<?xml version="1.0"?>
<ServiceConfiguration serviceName="MyCloudService"
xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
<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>
開発環境では、AccountNameとAccountSharedKeyの値は、上で示した値に固定されます(開発環境を使用する場合は、この名前とキーを使用する必要があります)。これにより、Azure Storageに対してデータをアクセスしたり保存したりする際の認証コードをテストできます。
コードの中のエンドポイントの値は、開発環境のためのものです。開発環境のAzureストレージのエンドポイントを確認するには、アプリケーションをデバッグし、システムトレイにある[Development Storage]管理ウィンドウを開きます。開発ストレージを初めて起動する場合は、開発ストレージのテーブルがまだ作成されていないため、Tableサービスは停止しています。開発ストレージのテーブルは、後のステップで作成します。

「Default.aspx」に、2つの数値を入力するための2つのテキストボックス、数値を加算するための1つのボタン、さらに取得キーを表示するための1つのラベルを追加します。次に、計算値を取得するためのテキストボックスとボタンを1つずつ、さらに計算値を表示するためのラベルを1つ追加します。各ボタンに対し、クリックイベントハンドラを作成します。図1.4に、すべてのコントロールをレイアウトし、ラベルを配置したフォームを示します。

以上で、アプリケーションの初期設定を終え、Azure Storageのアカウント情報を設定し、ユーザーインターフェースのレイアウトを作成できました。以下では、Azure Storageを利用して、クラウドサービスのロール間でやり取りを行う部分を追加します。
