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