Silverlight中服务通信方式的选择(WCF、Data Service、Ria Service)
轉(zhuǎn)自 http://www.cnblogs.com/024hi/archive/2011/06/23/2088295.html
WCF Service(WebService)
Web Services是經(jīng)實(shí)踐考驗(yàn)證明的跨防火墻的通信方式,它很穩(wěn)定且被廣泛認(rèn)可。總的來(lái)說(shuō)你需要為分散的CRUD操作指定相應(yīng)的接口并在Silverlight中忠實(shí)的調(diào)用他們
- 使用的原因:需要進(jìn)行類似直接通過(guò)服務(wù)進(jìn)行數(shù)據(jù)庫(kù)交互操作的項(xiàng)目(弱化業(yè)務(wù)邏輯部分)。
- 避免使用的原因:必須始終自己監(jiān)視數(shù)據(jù)的變化并調(diào)用相應(yīng)的服務(wù)方法進(jìn)行更新,任何需要并發(fā)的操作或事務(wù)變得較為沉重且需要處理大量的代碼。
ADO.NET Data Services
ADO.NET Data Services是一套簡(jiǎn)單的基于Rest的數(shù)據(jù)通信方式。它依賴于Http定義服務(wù)接口,如Get操作定義為讀寫(xiě)、Post操作定義為更新等。它使用ATOM或JSON作為序列化格式,所以可以被各種類型的客戶端調(diào)用。
他通過(guò)將基于URI的API轉(zhuǎn)換為L(zhǎng)INQ調(diào)用從而提供插入、更新、刪除等操作。這意味著ADO.NET本身是很單薄的一層,它的目的是將URI模型翻譯為數(shù)據(jù)通信代碼。
對(duì) 于Silverlight來(lái)說(shuō),ADO.NET Data Services真正的亮點(diǎn)在于其提供的客戶端類庫(kù)。這個(gè)客戶端類庫(kù)允許開(kāi)發(fā)者在客戶端使用LINQ查詢并在服務(wù)端執(zhí)行。當(dāng)然它支持的LINQ語(yǔ)法相比服 務(wù)端有一些局限,大概覆蓋80%的場(chǎng)景,當(dāng)然ADO.NET Data Service也允許開(kāi)發(fā)者在必要時(shí)自定義剩余的操作以適應(yīng)其他場(chǎng)景。另外,客戶端類庫(kù)提供一個(gè)強(qiáng)大的Data上下文類用以監(jiān)視和處理有事務(wù)支持的批量操 作。
使用ADO.NET Data Services公開(kāi)數(shù)據(jù)通信實(shí)際上是宮公開(kāi)查詢終結(jié)點(diǎn)的方式替代定義接口,這就是它最特別的地方。比如,我們可以像這樣使用LINQ查詢
| // Silverlight 代碼 // 使用 LINQ 創(chuàng)建擦汗尋 var qry = (from g in ds.Games where g.Price < 50m orderby g.Name select g) as DataServiceQuery<Game>; // 執(zhí)行查詢 qry.BeginExecute(new AsyncCallback(r => { games2.ItemsSource = qry.EndExecute(r).ToList(); games2.DisplayMemberPath = "Name"; }), null); |
- 使用的原因:想要一個(gè)簡(jiǎn)單、安全的模型使得開(kāi)發(fā)人員可以在代碼中定義他們需要的查詢(相對(duì)于基于接口的WCF Service)。得益于LINQ調(diào)用及上下文類,使用ADO.NET Data Services客戶端類庫(kù)會(huì)讓你的客戶端代碼量適當(dāng)減少。
- 避免使用的原因:當(dāng)你想要嚴(yán)格控制數(shù)據(jù)訪問(wèn)接口及不想讓可發(fā)者直接在客戶端使用LINQ查詢的情況下應(yīng)該避免使用ADO.NET Data Services。
WCF RIA Services
RIA Services基于這樣的思想:在服務(wù)端創(chuàng)建數(shù)據(jù)通信API同時(shí)在Silverlight中生成相應(yīng)的客戶端代碼。它的著重點(diǎn)在于服務(wù)端和客戶端共享代 碼(包括驗(yàn)證邏輯等)。另外他還允許開(kāi)發(fā)者創(chuàng)建一系列接口,并且同樣在客戶端提供上下文對(duì)象在客戶端監(jiān)視數(shù)據(jù)(包括批量操作)的變化并反饋給服務(wù)端。從某 種程度上來(lái)說(shuō),RIA Services是Web Services和ADO.NET Data的集大成者。
由于RIA Services基于服務(wù)端查詢接口定義,在客戶端開(kāi)發(fā)人員可以像這樣調(diào)用其接口定義的查詢:
| // Silverlight代碼 // context 對(duì)象監(jiān)視數(shù)據(jù)變化 XBoxGamesContext ctx = new XBoxGamesContext(); // RIA 查詢,基于接口 var qry = ctx.GetGamesByGenreQuery("Shooter"); // 綁定數(shù)據(jù) theList.ItemsSource = ctx.Load<Game>(qry).AllEntities; |
在介紹ADO.NET Data Services時(shí)曾提到開(kāi)發(fā)人員可以使用LINQ查詢,RIA Services同樣允許向查詢終結(jié)點(diǎn)添加LINQ 約束。例如你可以這樣對(duì)終結(jié)點(diǎn)添加LINQ表達(dá)式:
| var riaQry = ctx.GetGamesQuery() .Where(g => g.Price < 50m) .OrderBy(g => g.Name); LoadOperation<Game> op = ctx.Load<Game>(riaQry); |
- 使用的原因: RIA Services可以有力的減少應(yīng)用程序?qū)蛹?jí)數(shù)量,尤其適用于需要快速反應(yīng)的應(yīng)用程序開(kāi)發(fā)場(chǎng)景。RIA Service同時(shí)提供了像WebService那樣基于接口的支持及像ADO.NET Data Services中基于LINQ查詢的支持。
- 避免使用的原因:RIA Services中利用了很多系統(tǒng)自動(dòng)生成的代碼,調(diào)試時(shí)可能會(huì)碰到麻煩。
?
那么你的選擇是?歡迎討論~
作者:紫色永恒
出處:http://024hi.cnblogs.com/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利? posted on 2012-04-06 15:56 NET未來(lái)之路 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/archive/2012/04/06/2434826.html
總結(jié)
以上是生活随笔為你收集整理的Silverlight中服务通信方式的选择(WCF、Data Service、Ria Service)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DAO层使用泛型的两种方式
- 下一篇: 计失败的一次js优化