WCF Data Services
,舊稱
ADO.NET Data Services Framework
(代號
Astoria
,以下簡稱
WCF DS
)是基於
ADO.NET Entity Framework
上的一個簡單
資料供應服務
(Data Provisioning Services),也是微軟的
REST
(Representational state transfer) 的解決方案之一。特別?
AJAX
,
Silverlight
以及
Mashup
應用程式提供資料服務所設計。
目前 ADO.NET DSF 已經內含於 .NET Framework 3.5 Service Pack 1 中。
發展背景
[
??
]
以往在發展像是 AJAX 應用程式時,伺服端總是需要設計一個 HTTP 介面端口 (end point),通常都會使用
Web Service
來實作,但是隨著
Mashup
應用程式的成長,若每次都要?一?(或一組)資料撰寫 Web Service 或 HTTP end point 的話,對開發人員也是不小的負擔,而且 Web Service 只支援 XML/SOAP 的資料格式,無法相容於 Mashup 應用程式常用的
JSON
資料格式,微軟也發現未來的 Silverlight 應用程式也是會面臨到相同問題。
當時剛好微軟的
ADO.NET Entity Framework
也正在開發中,?的 EDM 能力剛好可以提供給
WCF
資料存取的能力,因此微軟特別以 ADO.NET Entity Framework ?基礎,開發一個專門提供 HTTP 端點資料服務的資料供應層,?? WCF DS。
架構
[
??
]
WCF DS 由
Entity Framework
中的 Entity Data Model (EDM) ?基底,Data Services Framework 的角色就是做? EDM 的 HTTP 出入口,開發人員可以利用 HTTP 動詞來存取 Data Services Framework,某種程度來說,WCF DS 是由 EDM + WCF 而成的一種資料供應服務,?可以被放在 WCF HTTP 通道,ASP.NET 以及 IIS 中。
WCF DS 的資料來源,可以是 ADO.NET Entity Framework,但如果是來自於其他的資料來源,則可以利用?該資料來源所實作的
LINQ
Provider(有實作 IQueryable<T> 介面的元件,若要支援更新則必須要再實作 IUpdatable 介面)來做?資料來源亦可。
WCF DS 除了可以將 Entity 公開到 HTTP 通道中,也可以由開發人員自行發展具商業邏輯的自訂函數來回傳資料,以及利用?詢的解譯器 (Query Interceptor) 來將?詢 Entity 的資料做過濾後再回傳。
存取方法
[
??
]
WCF DS 開放 EDM 在 HTTP 通道中,因此存取方法都要使用 HTTP 方式,GET/POST/PUT/DELETE 都可以使用,而且每個動詞所代表的意義都不同。
- GET:?詢資料。
- PUT:更新資料,必須要和 GET ?用,由 GET ?下資料修改後,用 PUT 更新。
- POST:新增資料。
- DELETE:刪除資料。
除了使用 HTTP 動詞以外,WCF DS ?提供了 .NET Client Library 讓 .NET Framework 應用程式可以存取,?也提供了讓 LINQ 可以存取到 WCF DS 的能力(? LINQ to WCF DS)。
下列?使用 LINQ to WCF DS 的範例:
using
System
;
using
System.Data.Services.Client
;
using
System.Linq
;
using
NorthwindModel
;
namespace
TestApplication
{
class
Program
{
static
void
Main
(
string
[]
args
)
{
NorthwindEntities
ctx
=
new
NorthwindEntities
(
new
Uri
(
"http://localhost:1365/Northwind.svc"
));
var
q
=
from
c
in
ctx
.
Customers
where
c
.
City
==
"London"
orderby
c
.
CompanyName
select
c
;
foreach
(
var
cust
in
q
)
{
Console
.
WriteLine
(
cust
.
CompanyName
);
}
}
}
}
若是使用
Silverlight
2.0開發,則可以使用 .NET Client Library for Silverlight 2.0 來簡化設計,如下:
NorthwindEntities
db
=
new
NorthwindEntities
(
new
Uri
(
"http://localhost/NorthwindDataServices.svc/"
));
var
query
=
from
c
in
db
.
Employees
select
c
;
AsyncCallback
ac
=
asyncResult
=>
{
var
queryResult
=
(
query
as
DataServiceQuery
<
NorthwindModel
.
Employees
>
).
EndExecute
(
asyncResult
);
foreach
(
var
result
in
queryResult
)
{
TextBlock
item
=
new
TextBlock
();
item
.
Tag
=
result
.
EmployeeID
;
item
.
Text
=
result
.
FirstName
+
" "
+
result
.
LastName
;
this
.
lstEmployeeList
.
Items
.
Add
(
item
);
}
};
(
query
as
DataServiceQuery
<
NorthwindModel
.
Employees
>
).
BeginExecute
(
ac
,
null
);
資料格式
[
??
]
在 WCF DS 中,可支援
JSON
(JavaScript Object Notation) 以及
ATOM
兩種資料格式,因此可適用於多數的
Mashup
或
AJAX
應用程式。
參考資料
[
??
]
|
---|
| ??
| |
---|
| 架構
| |
---|
| 共同語言基礎架構
| |
---|
| CLI支持語言
| |
---|
| Core家族
3
| |
---|
| 元件
| |
---|
| 比較
| |
---|
| ?將推出
| |
---|
| |
|