書籍転載
Windows Azure 実践クラウド・プログラミング
for C#/Visual Basic/PHP

Windows Azure Platform AppFabricによるオンプレミス−クラウド連携
― Chapter 6 Azureアプリケーションの拡張と運用(後編) ―

山田 祥寛
2010/10/25
Page1 Page2 Page3

本コーナーは、秀和システム発行の書籍『Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP』の中から、特にInsider.NET読者に有用だと考えられる章や個所をInsider.NET編集部が選び、同社の許可を得て転載したものです。基本的に元の文章をそのまま転載していますが、レイアウト上の理由などで文章の記述を変更している部分(例:「上の図」など)や、図の位置などを本サイトのデザインに合わせている部分が若干ありますので、ご了承ください。『Windows Azure 実践クラウド・プログラミング』の詳細は「目次情報ページ」もしくは秀和システムのサイトをご覧ください。

ご注意:本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。

サービスの実装と公開(オンプレミス環境)

 Azure AppFabricを利用するための準備ができたところで、ここからは具体的な実装例を見ていきましょう。本項で紹介するのは、以下のようなサービスです。

図6-41:サンプルの全体構成

 まずはサービスを実装する手順からです。

[1]新規のプロジェクトを作成する

 オンプレミスでの稼働を想定したプロジェクトということで、これまで利用してきたクラウドアプリケーションプロジェクトとは別に、AppFabricOnPremiseという名前で「WCFサービスアプリケーション」プロジェクト(ソリューション)を作成します*68

*68 自動生成されるIService1.cs、Service1.svcは不要なので削除してください。

 また、Azure AppFabricを利用するために、[参照の追加]ダイアログからMicrosoft.ServiceBus.dllへの参照も追加しておきます。Microsoft.ServiceBus.dllは、「C:\Program Files\Windows Azure platform AppFabric SDK\V1.0\Assemblies\NET4.0」フォルダの配下に含まれています。

[2]データベースを用意する

 サービス経由で公開するデータベースを、プロジェクトに追加します。サンプルデータベースは、ダウンロードサンプルの「/AppFabricOnPremise/App_Data」フォルダ配下にMyDB.mdfとして用意しています。これをAppFabricOnPremiseプロジェクト直下のApp_Dataフォルダにインポートしてください。MyDB.mdfは、以下のようなBookテーブルをひとつだけ含んだデータベースです。

フィールド名 データ型 概要
isbn nvarchar(25) ISBNコード
title nvarchar(100) 書名
price int 価格
publish nvarchar(30) 出版社
published date 刊行日
cdrom bit CD-ROM
表6-16 Bookテーブルのフィールドレイアウト

 既存のファイルをプロジェクトに追加するには、App_Dataフォルダを右クリックし、表示されたコンテキストメニューから[追加]−[既存の項目...]を指定します。

[3]データモデルを作成する

 WCFサービスで公開すべきデータを表すためのデータモデルを定義します。データモデルとは、データベースからデータを取得するとともに、その内容をアプリケーションからアクセス可能なオブジェクト(エンティティ)の形式で表したものを言います。

 データモデルを表現するにはさまざまな方法がありますが、本書ではEntity Framework*69というしくみを利用して、データモデル(Entityデータモデル)を定義します。

*69 Entity Frameworkとは、データスキーマをエンティティとしてモデル化し、かつ、エンティティ経由でデータベースにアクセスするための手段を提供するフレームワークです。詳細については、「ADO.NET Entity Framework入門」などを参照してください。

 データモデルの作成そのものはウィザードを利用すれば、ごく簡単です。プロジェクト直下に/Modelsフォルダを作成した上で、そのコンテキストメニューから[追加]−[新しい項目...]で「ADO.NET Entity Data Model」を追加します。ファイル名は「MyDB.edmx」としておきましょう。

図6-42:[Entity Data Modelウィザード]ダイアログ

 Entity Data Modelウィザードが起動しますので、表6-17の要領で必要な情報を入力していきます。

項目 設定/選択値
モデルに含めるコンテンツ データベースから生成
データ接続の選択 MyDB.mdf
Web.Configに保存 チェック
エンティティ接続名 MyDBEntities
モデルに含めるデータベースオブジェクト テーブル(すべて)
モデル名前空間 MyDBModel
表6-17 Entity Data Modelウィザードの設定

 ウィザードを終了した時、データベースの内容に基づいて、以下のようなADO.NETエンティティデザイナが表示されれば、データモデルは正しく作成できています。

図6-43:ADO.NETエンティティデザイナ

 Entityデータモデルを作成した後は、かならずソリューションをいったんビルドしておくようにしてください。さもないと、あとからサービスを実装する際にデータモデルを認識することができませんので、要注意です。

[4]BookServiceサービスを実装する

 オンプレミスで公開するサービスを実装します。以下のコードを理解するには、WCFの理解が必要となりますが、本書のテーマからは外れるため、解説は最小限に留めます。詳細は「Visual Studio 2008で標準搭載されたWindows Communication Foundation」などの記事も合わせて参照してください。

 また、リスト6-32、6-33のコードは/Servicesフォルダを作成し、その配下に配置するようにしてください。

using System.ServiceModel;
using AppFabricOnPremise.Models;

namespace AppFabricOnPremise.Services
{

 // サービスコントラクト(インターフェイス)の定義
 [ServiceContract]
 public interface IBookContract
 {
   [OperationContract]
   Book[] GetBookInfoByPublish(string publish);
 }

 // クライアントが利用するためのコントラクト
 public interface IBookChannel : IBookContract, IClientChannel { }
}
Imports System.ServiceModel

Namespace Services

 ' サービスコントラクト(インターフェイス)の定義
 <ServiceContract()>
 Public Interface IBookContract
   <OperationContract()>
   Function GetBookInfoByPublish(ByVal publish As String) As Book()
 End Interface

 ' クライアントが利用するためのコントラクト
 Public Interface IBookChannel
     Inherits IBookContract, IClientChannel

 End Interface

End Namespace
リスト6-32 サービスコントラクタの定義(上:IBookContract.cs、下:IBookContract.vb)

using System;
using System.Linq;
using AppFabricOnPremise.Models;

namespace AppFabricOnPremise.Services
{
  public class BookService : IBookContract
  {
    public Models.Book[] GetBookInfoByPublish(string publish)
    {
     
      // コンテキストオブジェクトを生成
      var db = new MyDBEntities();


     
      // 指定された出版社の書籍情報をBookオブジェクト配列として抽出
      return (from b in db.Book
              where b.publish == publish
              orderby b.published descending
              select b).ToArray();
    }
  }

}
Namespace Services

  Public Class BookService
      Implements IBookContract

    Public Function GetBookInfoByPublish(ByVal publish As String) As Book() Implements IBookContract.GetBookInfoByPublish

     
      ' コンテキストオブジェクトを生成
      Dim db = New MyDBEntities()


     
      ' 指定された出版社の書籍情報をBookオブジェクト配列として抽出
      Return (From b In db.Book
              Where b.publish = publish
              Order By b.published Descending
              Select b).ToArray()

    End Function
  End Class

End Namespace
リスト6-33 サービスの実装(上:BookService.cs、下:BookService.vb)

 WCFサービスの仕様を定義するIBookContractインターフェイス(とそのメンバ)には、それぞれServiceContract/OperationContract属性を付与します。WCFは、これら属性の付いたメンバをサービスとして公開します。

 このようにサービスの仕様を定義したインターフェイスのことをサービスコントラクトと呼びます。なお、IBookChannelインターフェイスは、あとからクライアント(Webロール)が利用するためのコントラクトです。

 WCFサービスの実体は、サービスコントラクト(IBookChannelインターフェイス)を実装したBookServiceクラスで定義しています。

 MyDBEntitiesクラスは、先ほどEntity Data Modelウィザードで自動生成したクラスで、データモデルの本体だと思って頂ければ良いでしょう()。エンティティに対するコンテナ(入れ物)としての役割を果たすオブジェクトです*70。GetBookInfoByPublishメソッドでは、このMyDBEntitiesオブジェクトのBookプロパティにアクセスすることで、Bookエンティティの集合(エンティティセット)を取得しているわけです。エンティティセットを取得してさえしまえば、あとはLINQ(where/orderby/select句)でエンティティの絞り込みや並べ替えも自由に行えます(*71)。

*70 コンテキストオブジェクトとも呼びます。
*71 LINQに関する基本的な解説は、本書では割愛しています。LINQの基本を知りたい方は、プログラミングLINQ(日経BPソフトプレス)などの専門書を参照してください。


 INDEX
  [書籍転載]Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP
  Windows Azure Platform AppFabricによるオンプレミス−クラウド連携
  1.サービスの実装と公開(オンプレミス環境)(1)
    2.サービスの実装と公開(オンプレミス環境)(2)
    3.Azure AppFabric経由のサービスアクセス(クラウド環境)

インデックス・ページヘ 「Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間