ADO.NET Data Servicesでのサービス実装
では、実際に構築手順に移ります。
前述したサンプルシステムを使用し、開発環境はVisual Studio 2008 Service Pack 1とSQL Server 2008を使用します。また、データモデルとして、ADO.NET Entity FrameworkのEntity Data Modelを作成します。環境に関する詳細は、上記のサンプルシステムのサイトでご確認ください。
ADO.NET Data Servicesの実装は、Silverlightアプリケーションでの活用を考えて、「Silverlight Navigation Application」Visual Studioテンプレートから作成されるWeb側のプロジェクトにしたいと思います。
手順
- Visual Studioの[新規作成]-[プロジェクト]より[Silverlight Navigation Application]テンプレートを選択して[OK]をクリックします(ファイル名は「MSStoreSample.Client」とします)。
- 次にMSStoreSample.Webにデータ公開用のサービスを実装します。 [プロジェクト]-[新しい項目の追加] ダイアログボックスでADO.NET Entity Frameworkを選択して[追加]をクリックします(ファイル名は「MSStoreSample.edmx」とします)。
- Entity Data Modelウィザードが表示されますので、[データベースから生成]を選択し[追加]をクリックします。
- Entity Data Modelウィザードでデータ接続を指定します。この時、接続情報としてSQL Serverのインスタンスであるsqlexpressを指定して、MSStoreSampleデータベースを選択します。このデータベースはサンプルシステムのインストールと共に作成が可能です。
- aspnet_XXX 以外のテーブルとビュー、sp_CreateOrderとsp_DeleteBasketのストアドプロシージャ2つにチェックを入れ [完了] を押下します。これで、プロジェクトの中にMSStoreSample.edmxが作成されます。
- ここまでの操作により、データベースのモデルが準備できました。次にMSStoreSample.Webプロジェクトに対して、ADO.NET Data Services を追加します。[プロジェクト]-[新しい項目の追加] ダイアログ ボックスでADO.NET Data Servicesを選択して[追加]をクリックします(ファイル名は「MSStoreSampleDataService.svc」とします)。
- 追加したADO.NET Data Service(MSStoreSampleDataService.svc)に対して、使用するモデル、データアクセス用のルールを指定します(太字になっている箇所が実際に記述したコードです)。このサービス上では、基本的にすべてのエンティティ(テーブル)がAllRead(読み取り専用)として指定されます。ただし、Baskets、Baskettemsエンティティはフルアクセスが可能となります。
- ここまでの手順により結果を確認することが可能です。ソリューションエクスプローラーから、MSStoreSampleDataService.svcを右クリックし、[ブラウザで表示]を選択して、結果を確認します。
この時、同時にSilverlightアプリケーションをホストするWebサイトを作成することになります(ファイル名は「MSStoreSample.Web」とします)。
using System; using System.Collections.Generic; using System.Data.Services; using System.Linq; using System.ServiceModel.Web; using System.Web; using MSStoreSample.Models; namespace MSStoreSample.Web { public class MSStoreSampleDataService : DataService<MSStoreSampleEntities> { // このメソッドは、サービス全体のポリシーを初期化するために、1 度だけ呼び出されます。 public static void InitializeService(IDataServiceConfiguration config) { config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); config.SetEntitySetAccessRule("Baskets", EntitySetRights.All); config.SetEntitySetAccessRule("BasketItems", EntitySetRights.All); } } }
エンティティに対するアクセスルールには他にも以下のが存在します。
None | データへのすべてのアクセス権を拒否 |
ReadSingle | 単一のデータ項目を読み取る許可 |
ReadMultiple | データ セットを読み取る許可 |
WriteAppend | 新しいデータ項目をデータ セットに作成する許可 |
WriteReplace | データを置換する許可 |
WriteDelete | データ セットからデータ項目を削除する許可 |
WriteMerge | データをマージする許可 |
AllRead | データを読み取る許可 |
AllWrite | データを書き込む許可 |
All | データを作成、読み取り、更新、および削除する許可 |
次のような画面が表示されます。これは、このサービスが公開しているエンティティの一覧です。
データを取得してみましょう。以下のアドレスを指定します。Categories エンティティの全リソース(データ)が AtomPub(XML)の形で取得されます。
http://ホストのアドレス/MSStoreSampleDataService.svc/Categories