書籍転載
|
|
本コーナーは、秀和システム発行の書籍『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フォルダを作成し、その配下に配置するようにしてください。
|
||
リスト6-32 サービスコントラクタの定義(上:IBookContract.cs、下:IBookContract.vb) |
|
||
リスト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」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|