スマホ×Windows Azure開発講座(Windows Phone編)

第3回 Windows Azure上にRESTサービスの構築

この記事を読むのに必要な時間:およそ 1 分

はじめに

今回から数回にわたって合わせて1つのスマホ×Azureなアプリケーションになるような簡単なサンプルアプリケーションを構築していきます。連載第3回の今回はWindows AzureでRESTアクセス可能なWebサービスを構築していきたいと思います。

プロジェクトの作成

それではWindows Azureアプリケーションの開発の基となる「プロジェクト」を作成していきます。Visual Studioを起動し,スタートページが表示されている状態で,ファイル>新規作成>プロジェクトを選択します。⁠新しいプロジェクト」ダイアログが表示されるので,テンプレートとしてCloudカテゴリーを開き,⁠Windows Azure Project」を選択します。

次に,プロジェクトの名前(と必要であれば場所)を指定します。ここでは下記の名前にしています図1)⁠

  • プロジェクト名:GihyoAzureSampleGame01

図1 プロジェクトの作成

図1 プロジェクトの作成

OKボタンをクリックすると,⁠New Windows Azure Project」ダイアログが開きます。今回はWebロールのアプリケーションを構築するので下記設定のプロジェクトを追加することにします図2,図3)⁠

  • プロジェクトのタイプ:ASP.NET Web Role
  • プロジェクトの名前:GameWebRole

左のペインでASP.NET Web Roleを選んで「>」ボタンをクリック後,右ペインでプロジェクト名を編集することができるようになるので,編集しておきます。

図2 ASP.NET Web Roleというプロジェクトタイプを選択

図2 ASP.NET Web Roleというプロジェクトタイプを選択

図3 GameWebRoleという名前で作成

図3 GameWebRoleという名前で作成

2つのプロジェクトを作成しましたが,最初のWindows Azure Projectを作成した際に,同名の「ソリューション」も作成されます。これはプロジェクトの入れ物で,後で追加したWebロールのプロジェクトと併せては2つのプロジェクトでソリューションが構成されることになります。

RESTサービスの作成

次に,RESTサービスの実装を行っていきます。今回は下記シナリオを実現するWebサービスを作成します。

  • カードを引く
  • カードの一覧を取得する

今回は上記を簡略化して,1から10までの乱数を引く,その乱数の一覧を取得するWebサービスを作成します。また,実装に関しては作成された2つのプロジェクトのうちのGameWebRoleプロジェクトに対して行っていきます。

参照の追加

まずは開発に必要なアセンブリ(コードライブラリ)への参照を追加していきます。「参照設定」を右クリックし,「参照の追加」をクリックします。そこで下記4つの参照を追加します図4)。

  • System.Runtime.Serialization
  • System.ServiceModel
  • System.ServiceModel.Activation
  • System.ServiceModel.Web

図4 参照の追加

図4 参照の追加

System.ServiceModel名前空間のクラスはWebサービスを開発する際に必要なライブラリです。

エンティティクラスの作成

次に,Webサービスの通信インターフェースであるエンティティクラスを作成します。DTO(Data Transfer Object)とも呼ばれるクラスになります。2つのクラスを作成します。それぞれ一覧取得処理のインターフェースとして利用します。一覧取得時にリクエストパラメータがないのでリクエストDTOの中身は空,レスポンスDTOはカードの一覧(今回は乱数の一覧)を保持するリストを持っているものとします。また,クラスはGameWebRoleプロジェクト直下に「Model」フォルダを作成して,その下に作るものとします。Modelフォルダを右クリックし,追加>クラスで作成していってください。

GameServiceRequest.cs

using System.Runtime.Serialization;
namespace GameWebRole.Model
{
    [DataContract]
    public class GameServiceRequest
    {
    }
}

GameServiceResponse.cs

using System.Collections.Generic;
using System.Runtime.Serialization;
 
namespace GameWebRole.Model
{
    [DataContract]
    public class GameServiceResponse
    {
        [DataMember(Name = "cardList")]
        public List CardList { get; set; }
    }
}

ポイントは[DataContract]属性をクラスに付加している部分です。これを付けておくと,通信時に適切にXMLやJSONフォーマットにデータが変換されるようになります。同様に[DataMember]属性は指定したプロパティがXMLやJSONに変換されるべきで,その際に指定した名前で変換するように指定しています。

著者プロフィール

福田寅成(ふくだともなり)

クラスメソッド株式会社

RIAエバンジェリスト

RIAやクラウドに関する技術記事執筆やセミナーの開催を通じて,先進技術の啓蒙を行う日々。Flex/AIR/Silverlight/AWS/Azure/Android/iOS/Windows Phone/UXと幅広い技術を担当。

Twitter:@Cronoloves

コメント

コメントの記入