連載:ADO.NET Entity Framework入門第7回 EF4によるN層アーキテクチャと自己追跡エンティティ【後編】WINGSプロジェクト 土井 毅 著/山田 祥寛 監修2011/01/07 |
|
前回の前編では、N層アーキテクチャで使用する自己追跡エンティティの仕組みについて説明した。後編となる今回は、自己追跡エンティティをWCF(Windows Communication Foundation)で公開し、Silverlightクライアントでの編集/更新処理を実装してみよう。
図1 3層アーキテクチャ・サンプル |
赤線で囲んだ部分が今回実装する個所。 |
WCFによるサービスの公開
WCFはWebサービスなどのアプリケーション間通信を共通の枠組みで取り扱うためのフレームワークである。WCFの適用範囲は.NETアプリケーション環境に限られておらず、データ形式もXMLやJSONなどに対応する、柔軟な通信フレームワークである。また、今回クライアントとして使用するSilverlightとの相性も優れており、Webサーバで提供されているサービスをSilverlightのクライアントから透過的に呼び出すことができる。
WCFの詳細は以下の記事などを参照していただきたい。
今回はごくシンプルに、以下のような自己追跡エンティティの取得/更新処理をWebサービスとして公開することにしよう。
| ||||||
表1 今回公開するWebサービス | ||||||
SilverlightクライアントはGetEntriesサービスでEntryオブジェクトの一覧を取得し、クライアント側で編集を行った後、UpdateEntriesサービスでサーバにデータを書き戻す形となる。
それではWCFサービスを実装していこう。
■プロジェクトの追加
まずVisual Studio 2010のソリューションに、Silverlightアプリケーションを追加しよう。メニューバーの[ファイル]−[新規追加]−[プロジェクト]より「Silverlight アプリケーション」を追加する(図1)。
図2 Silverlightアプリケーションの追加 |
メニューバーの[ファイル]−[新規追加]−[プロジェクト]から表示される[新しいプロジェクトの追加]ダイアログで追加しているところ。 |
追加後、図2のようなダイアログが表示されるので、[Silverlight のバージョン]欄を「Silverlight 4」に設定して[OK]ボタンを押す。
図3 Silverlightアプリケーションの設定 |
この操作により、以下の2つのプロジェクトが追加される。
- Silverlightアプリケーション・プロジェクト(AddressBookSilverlightApp)
- Silverlightアプリケーションを公開するためのWebアプリケーション・プロジェクト(AddressBookSilverlightApp.Web)
今回はAddressBookSilverlightApp.WebプロジェクトでWCFサービスの公開処理も含めることにする。それぞれのプロジェクトの役割を表2にまとめておく。
| ||||||||||||
表2 サンプルで使用するプロジェクトとそれぞれの役割 | ||||||||||||
■WCFサービスの実装
ではAddressBookSilverlightApp.WebプロジェクトにWCFサービスを実装しよう。
まずはメニューバーの[プロジェクト]−[新しい項目の追加]から「WCF サービス」を追加しよう。今回は「AddressBookService.svc」という名前でWCFサービスを作成する(図4)。
図4 WCFサービスの追加 |
「AddressBookService.svc」という名前でWCFサービスを作成する。 メニューバーの[プロジェクト]−[新しい項目の追加]から表示される[新しい項目の追加]ダイアログで追加しているところ。 |
続いて自己追跡エンティティをWCFで公開するため、AddressBookDataプロジェクトへの参照を追加しよう。メニューバーの[プロジェクト]−[参照の追加]から表示できる[参照の追加]で[プロジェクト]タブより「AddressBookDataプロジェクト」を選択する(図5)。
図5 AddressBookDataプロジェクトへの参照を追加 |
メニューバーの[プロジェクト]−[参照の追加]から表示できる[参照の追加]で追加しているところ。 |
WCFサービスを実装するため、AddressBookService.svc.cs/AddressBookService.svc.vbファイルを開き、これを次のリスト1のように修正する。
| ||
リスト1 WCFサービスの実装(上:AddressBookService.svc.cs、下:AddressBookService.svc.vb) |
両メソッドに付加されているOperationContract属性は、WCFでメソッドを公開するために必要なものである。
GetEntriesメソッドはシンプルに、オブジェクト・コンテキストのEntriesプロパティに格納されているEntryオブジェクトすべてをリストに変換してクライアントに返している。
一方、UpdateEntriesメソッドでは、クライアントから渡されたEntryオブジェクトそれぞれについて、ApplyChangesメソッドで更新を反映し、オブジェクト・コンテキストのSaveChangesメソッドでデータベースへの書き戻しを行っている。
ここでキモとなるのはApplyChangesメソッドで、これは自己追跡エンティティ自動生成時にオブジェクト・コンテキストのメソッドとして生成されている。このメソッドは、自己追跡エンティティの変更履歴を検証し、データベースに書き戻す際に必要な操作(追加/更新/削除)を決定する。
なお、両メソッドの戻り値および引数で自己追跡エンティティが用いられているが、前回確認したとおり、自己追跡エンティティにはDataContract属性が付加されているため、WCFを介してそのまま送受信できる。
INDEX | ||
ADO.NET Entity Framework入門 | ||
第7回 EF4によるN層アーキテクチャと自己追跡エンティティ【後編】 | ||
1.WCFによるサービスの公開/プロジェクトの追加/WCFサービスの実装 | ||
2.Silverlightアプリケーションの実装 − サービス参照の追加 | ||
3.UI実装とWCFサービス呼び出し/サンプルの実行/まとめ | ||
「ADO.NET Entity Framework入門」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|