開放資料協定(OData)是基於資源的 Web 協定,用於查詢與更新資料。採用 HTTP 動詞(GET/PUT/POST/MERGE/DELETE)操作資源,URI 識別資源,資料以 AtomPub 或 JSON 傳輸。AtomPub 之上定義查詢與結構描述慣例。核心價值:任何 OData 用戶端可操作任何 OData 生產者,無需學習特定服務程式模型。
一次開發,多端互通;一次發布,多客戶端消費。
$inlinecount=allpages 取得實體總數;單獨請求計數。INotifyPropertyChanged/CollectionChanged,雙向繫結 Silverlight DataGrid 等控制項,自動追蹤變更並回寫。Select 只取必要屬性,減少頻寬與客戶端記憶體佔用。Listings.svc) 發布為 OData 端點。/_vti_bin/ListData.svc)。public class Listings : DataService<ListingsEntities>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Listings", EntitySetRights.AllRead);
config.SetEntitySetAccessRule("Properties", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
| 選項 | 說明 |
|---|---|
| $top=n | 前 n 筆 |
| $skip=n | 跳過 n 筆 |
| $inlinecount=allpages | 包含總筆數 |
| $filter=expr | 篩選(如 Status eq 'Available') |
| $orderby=expr | 排序 |
| $select=expr | 投影屬性子集 |
| $format=atom|json | 指定格式(WCF DS 不支援) |
VS 中右鍵專案 → Add Service Reference,輸入 OData 端點 URI,自動產生用戶端內容類別與強型別 Proxy。
var ogdi = new dcDataService(new Uri(ogdiUri));
var agents = new AgentsDataContext(new Uri(spUri));
var listings = new ListingsEntities(new Uri(lstUri));
var coll = new DataServiceCollection<Listing>();
listingsGrid.ItemsSource = coll;
var q = from l in listings.Listings.Expand("Property") select l;
coll.LoadAsync(q); // 內建非同步回調處理
DataServiceCollection 變更追蹤 → UI 異動自動反映實體 → BeginSaveChanges 批次回寫。
選取清單後,以仲介姓名查詢 SharePoint 服務;查詢 OGDI 社區資料同理。客戶端建立虛擬關聯,無需後端關聯。

VS 2010 擴充工具(Tools → Extension Manager),視覺化服務結構:實體集為方框,關聯為連線。OGDI 服務呈扁平結構(無關聯),快速掌握資料形態。
