Upload
bruce-ellis
View
110
Download
0
Embed Size (px)
DESCRIPTION
セッション ID : T4-303. Open Data Protocol ( OData ) と WCF Data Services によるサービスの作成. マイクロソフト株式会社 デベロッパー&プラットフォーム統括本部 エバンジェリスト 井上大輔. セッションの目的 Open Data Protocol の What WCF Data Services の How セッションのゴール Open Data Protocol の“ 多様性 ”を 認識 WCF Data Services の“ 手軽さ ”を認識. - PowerPoint PPT Presentation
Citation preview
マイクロソフト株式会社デベロッパー&プラットフォーム統括本部エバンジェリスト井上大輔
Open Data Protocol (OData) とWCF Data Services によるサービスの作成
セッション ID : T4-303
3
セッションの目的とゴールSession Objectives and Takeaways
セッションの目的Open Data Protocol の WhatWCF Data Services の How
セッションのゴールOpen Data Protocol の“多様性”を認識WCF Data Services の“手軽さ”を認識
4
アジェンダ
Open Data Protocol (OData) とは ?~ 特徴とその価値 ~
WCF Data Services による開発~ 手軽なサービス開発 ~
WCF Data Services のセキュリティ~ 認証と承認 ~
~ 特徴とその価値 ~
Open Data Protocol (OData) とは ?
6
クラウド時代のデータ共有
政府ニュース
SNS 地図学術
リサーチイベント
商品カタログ辞書株価
時刻表
MobilePCTV/Game
Server
店舗顧客
売上
メール
在庫入出庫
見積受注 図面
人事
7
OData とは ?データ共有用の RESTful プロトコル
様々な環境でデータを共有するための規約AtomPub の拡張セット
構造化データ、 CRUD 操作、 URI による複雑なクエリ ( クエリ式 ) 、 JSON フォーマット
Open Specification Promise の基でリリース
多くの製品やテクノロジで対応サーバークライアント
HTTP/REST
8
ご参考~ URI クエリ式 ~
クエリ オプション
説明
$expand アドレス指定したエンティティと一緒に関連エンティティのセットを 1 つの応答で返すようサービスに指示します。
$filter クエリ演算子および関数を使用して、返されたセットをフィルターするようサービスに指示します。
$inlinecount allpages が指定されている場合、 URI によって返されるすべてのエンティティのカウントを含めるようサービスに指示します。
$orderby クエリ演算子を使用して、返されたエンティティを並べ替えるようサービスに指示します。
$select 返されたプロパティを指定したプロジェクションのプロパティだけに制限するようサービスに指示します。
$skip 指定した数のエンティティをセットの最初でスキップするようサービスに指示します。
$skiptoken サーバーのページングが有効な場合、結果の次のページを返すようサービスに指示します。
$top セット内の指定した数のエンティティを返すようサービスに指示します。
9
OData 対応~ サーバー ~製品やテクノロジ
SharePoint 2010Windows Azure StorageSQL AzureWCF Data ServicesWCF RIA ServicesSQL Server Reporting Services 2008 R2IBM WebSphere eXtreme Scaleodata4j (Google AppEngine)など
外部サービスTech·Ed 2010 MIX 10NetflixVancouver’s vanGuideOpen Government Data InitiativeOpen Science Data Initiativeなど
10
OData 対応~ クライアント ~
アプリExcel + PowerPivotOData ExplorerOData PowerShell ExploreriPhone OData BrowserLINQPadSesameなど
ライブラリ.NETSilverlightWindows Phone 7iPhone 、 iPad (Objective-C)Android (odata4j)jQueryJavaPHPRubyなど
11
多様な環境への適用全ての層を横断した HTTP/REST の適用
デバイス、 OS 、クラウド、 DB 、 UI
~ 手軽なサービス開発 ~
ADO.NET Data Services による開発
+ ODataWCF
13
WCF の全体像
Channel ModelFormats
(Atom, JSON, XML,…)
Transports(HTTP, TCP, …)
Protocols(SOAP, HTTP, OData,…)
Service Model
Data Contract Service ContractService Behavior
Programming Model
Core Services
Web HTTP Services
Data Services
RIA Services
Workflow Services
14
WCF Data Services とは ?~ サーバー ~
データの CRUD 処理に特化して手軽に RESTful なサービス開発を実現
サービス層から DAL へ直接アクセスOData としてデータを公開
様々な環境に対応したアプリやライブラリを提供
Web サーバー(ASP.NET Application Server)
BusinessLogic
ビジネス データアクセス
ADO.NETEF
などWCF
サービスWCFData
Services
DB
クライアント
サーバー
OData
SOAP など
CRUD 処理
~ サーバー ~
WCF Data Services による手軽なサービス開発
DEMO
クライアント
OData
サーバー
16
ご参考~ データの公開 ( サーバー ) ~
public class pubsDataService : DataService< pubsEntities >{ public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule("*", EntitySetRights.All); config.SetEntitySetPageSize("*", 2);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; }}
データ ソース
アクセス ルール
ページ サイズ
17
WCF Data Services とは ?~ クライアント ~
.NET 専用クライアント ライブラリサービス操作用プロキシ クラスを自動生成
LINQ を活用した柔軟なクエリ追加、更新、削除処理変更管理の実装を含む
クライアント
ODataプロキシ クラス
サーバー
~ .NET ライブラリ ~
サービスの利用
DEMO
クライアント
ODataプロキシ クラス
サーバー
19
ご参考~ LINQ を使ったクエリ ( クライアント ) ~
pubsEntities context = new pubsEntities(new Uri("http://localhost.:8582/pubsDataService.svc/"));
var query = (from e in context.employees where e.job_lvl > 100 orderby e.hire_date select new { name = e.fname + " " + e.lname, hire_date = e.hire_date, job_desc = e.job.job_desc }).Skip(3).Take(2).ToList();
int count = query.Count();
LINQ を利用した様々なデータ操作
プロキシ クラス
20
ご参考~ データの追加 ( クライアント ) ~
pubsEntities context = new pubsEntities(new Uri("http://localhost.:8582/pubsDataService.svc/"));
employee emp = new employee { emp_id = “MAP88185M”, fname = “Daisuke”, ・ ・ ・ };
context.AddToemployees(emp);context.SaveChanges(); データの追加を
サーバーへリクエスト
21
Silverlight で利用するには ?Silverlight 専用クライアント ライブラリサービス操作用プロキシ クラスを自動生成Silverlight の特徴
クライアントのブラウザーで動作データベースへの直接アクセスは不可
サーバー上のデータはサービスを通じて操作サービスへのアクセスはすべて非同期処理
クライアント
OData
サーバー
プロキシ クラス
非同期
~ Silverlight ライブラリ ~
サービスの利用
DEMO
クライアント
OData
サーバー
プロキシ クラス
非同期
23
ご参考~ 非同期クエリ (Silverlight) ~private void button1_Click(object sender, RoutedEventArgs e){ pubsEntities context = new pubsEntities(new Uri("pubsDS.svc", UriKind.RelativeOrAbsolute)); var query = (from emp in context.employees select emp) as DataServiceQuery<employee>; query.BeginExecute(EmployeesQueryCompleted, query);}
private void EmployeesQueryCompleted(IAsyncResult result){ Dispatcher.BeginInvoke(() => { var query = result.AsyncState as DataServiceQuery<employee>; IEnumerable<employee> employees = query.EndExecute(result).ToList(); dataGrid1.ItemsSource = employees; });}
非同期クエリ処理終了
非同期コールバック
メソッドの実装
非同期クエリ処理開始
URL の指定は不要
24
ご参考~ 非同期クエリと双方向バインド (Silverlight) ~private void button2_Click(object sender, RoutedEventArgs e){ pubsEntities context = new pubsEntities(new Uri(" pubsDS.svc", UriKind.RelativeOrAbsolute));
var query = (from emp in context.employees select emp) as DataServiceQuery<employee>;
var collection = new DataServiceCollection<employee>(); dataGrid1.ItemsSource = collection; collection.LoadAsync(query);}
双方向バインド コレクション
非同期クエリ処理
25
ご参考~ 非同期データ追加 (Silverlight) ~private void button3_Click(object sender, RoutedEventArgs e){ pubsEntities context = new pubsEntities(new Uri("pubsDS.svc", UriKind.RelativeOrAbsolute)); employee emp = new employee { emp_id = “MAP88184M”, fname = “Daisuke”, lname = “Inoue”, ・ ・ ・ }; context.AddToemployees(emp); context.BeginSaveChanges(SaveChangesOptions.Batch, OnAddEmployees, context);}
private void OnAddEmployees(IAsyncResult result){ Dispatcher.BeginInvoke(() => { pubsEntities context = result.AsyncState as pubsEntities; DataServiceResponse response = context.EndSaveChanges(result); });}
非同期追加処理終了
非同期追加処理開始非同期処理
コールバックメソッドの実装
~ 認証と承認 ~
WCF Data Services のセキュリティ
27
認証と承認
Web サーバー
DB
クライアント
サーバー
認証 (Authentication)誰であるかを特定すること ( ログイン )
承認、認可 (Authorization)リソースへのアクセス制御
ODataWindows認証など
IIS
ACL
ASP.NET
フォーム認証など
設定 ファイル
WCF Data Services
QueryInterceptorChangeInterceptorSetEntitySetAccessRule
28
ご参考~ Windows 資格情報の取得 ( クライアント ) ~
context.Credentials = CredentialCache.DefaultCredentials;
context.UseDefaultCredentials = true;
※ デフォルト true
29
承認、認可 (Authorization)IIS
Windows 認証の場合、 エクスプローラーのプロパティ ウィンドウから ACL で指定ASP.NET設定ファイル (Web.config)
の <authorization> 要素で指定WCF Data Services
QueryInterceptor参照処理でカスタム ロジックを割り込ませる属性
ChangeInterceptor参照以外の処理でカスタム ロジックを割り込ませる属性
SetEntitySetAccessRuleエンティティ セット単位でアクセス権を指定
30
ご参考~ QueryInterceptor ( サーバー ) ~
[QueryInterceptor("employees")]public Expression<Func<employee, bool>> empfilter(){ if (!HttpContext.Current.User.Identity.IsAuthenticated) return (employee e) => false;
var id = HttpContext.Current.User.Identity.Name;
if (id == "Administrator") return (employee e) => true; else return (employee e) => e.emp_id == id;}
エンティティ セット (employees) の参照で割り込み発生
31
ご参考~ ChangeInterceptor ( サーバー ) ~
[ChangeInterceptor("employees")]public void OnChangeEmployees(employee e, UpdateOperations operations){ if (!HttpContext.Current.User.Identity.IsAuthenticated) throw new DataServiceException(403, "Access Denied");
var id = HttpContext.Current.User.Identity.Name;
if (id != "Administrator") { if (id != e.emp_id) throw new DataServiceException(403, "Access Denied"); if (operations == UpdateOperations.Add || operations == UpdateOperations.Delete) throw new DataServiceException(403, "Access Denied"); }}
エンティティ セット (employees) の参照以外で割り込み発生
オペレーションの指定
32
ご参考~ EntitySetRights で指定可能なメンバー ~
メンバー名 説明
None データへのすべてのアクセス権を拒否
ReadSingle 単一のデータ項目を読み取る許可
ReadMultiple データ セットを読み取る許可
WriteAppend 新しいデータ項目をデータ セットに作成する許可
WriteReplace データを置換する許可
WriteDelete データ セットからデータ項目を削除する許可
WriteMerge データをマージする許可
AllRead データを読み取る許可
AllWrite データを書き込む許可
All データを作成、読み取り、更新、および削除する許可
複数指定config.SetEntitySetAccessRule(“employees", EntitySetRights.AllRead | EntitySetRights.WriteDelete);
33
まとめ
OData は今後のクラウド時代を見据えたデータ共有プロトコル
OData に対応することで様々な環境で データを共有
WCF Data Services を用いて多機能な OData 対応のサービスを手軽に開発
34
関連セッション
T4-402 : ADO.NET Entity Framework ディープ ダイブ ~ EF 4 アーキテクチャと実践的活用 ~
T6-401 : WCF RIA Services を使った Silverlight 4 アプリケーション開発 ~ 迅速性と効率性の追求 ~
T1-309 : Windows Azure ストレージ詳説
T6-312 : Windows Communication Foundation 4 における新機能のポイント ~ REST サービスからワークフロー サービスまで ~
35
リファレンス講師のブログhttp://blogs.msdn.com/b/daisukei
講師の Twitterhttp://twitter.com/daisukei777
データ プラットフォーム ( データ アクセス ) 開発http://msdn.microsoft.com/ja-jp/data/default.aspx
Open Data Protocol 本家サイト http://www.odata.org/
ご清聴ありがとうございました。
T4-303アンケートにご協力ください。