設定資料服務 (WCF Data Services)
有了 WCF Data Services ,您就可以建立可公開 Open Data Protocol (OData) 摘要的資料服務。這些摘要中的資料可能來自各種不同的資料來源。WCF Data Services 會使用資料提供者公開此資料,做為 OData 摘要。這些提供者包含 Entity Framework 提供者、反映提供者,以及一組自訂資料服務提供者介面。提供者實作會針對此服務定義資料模型。如需詳細資訊,請參閱資料服務提供者 (WCF 資料服務)。
在 WCF Data Services 中,資料服務是繼承自 DataService 類別的一種類別,其中資料服務的類型即為資料模型的實體容器。此實體容器具有一個或多個可傳回 IQueryable (用於存取資料模型中的資料集) 的屬性。
資料服務的行為由 DataServiceConfiguration 類別的成員及 DataServiceBehavior 類別的成員定義,可從 DataServiceConfiguration 類別的 DataServiceBehavior 屬性存取。DataServiceConfiguration 類別會提供給資料服務所實作的 InitializeService 方法,如下列 Northwind 資料服務實作所示:
' This method is called only once to initialize service-wide policies.
Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
' Set the access rules of feeds exposed by the data service, which is
' based on the requirements of client applications.
config.SetEntitySetAccessRule("Customers", EntitySetRights.ReadSingle)
config.SetEntitySetAccessRule("Employees", EntitySetRights.ReadSingle)
config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead _
And EntitySetRights.WriteAppend _
And EntitySetRights.WriteMerge)
config.SetEntitySetAccessRule("Order_Details", EntitySetRights.All)
config.SetEntitySetAccessRule("Products", EntitySetRights.ReadMultiple)
' Set page size defaults for the data service.
config.SetEntitySetPageSize("Orders", 20)
config.SetEntitySetPageSize("Order_Details", 50)
config.SetEntitySetPageSize("Products", 50)
' Paging requires v2 of the OData protocol.
config.DataServiceBehavior.MaxProtocolVersion = _
System.Data.Services.Common.DataServiceProtocolVersion.V2
End Sub
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// Set the access rules of feeds exposed by the data service, which is
// based on the requirements of client applications.
config.SetEntitySetAccessRule("Customers", EntitySetRights.ReadSingle);
config.SetEntitySetAccessRule("Employees", EntitySetRights.ReadSingle);
config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead
& EntitySetRights.WriteAppend
& EntitySetRights.WriteMerge);
config.SetEntitySetAccessRule("Order_Details", EntitySetRights.All);
config.SetEntitySetAccessRule("Products", EntitySetRights.ReadMultiple);
// Set page size defaults for the data service.
config.SetEntitySetPageSize("Orders", 20);
config.SetEntitySetPageSize("Order_Details", 50);
config.SetEntitySetPageSize("Products", 50);
// Paging requires v2 of the OData protocol.
config.DataServiceBehavior.MaxProtocolVersion =
System.Data.Services.Common.DataServiceProtocolVersion.V2;
}
資料服務組態設定
DataServiceConfiguration 類別可讓您指定下列資料服務行為:
成員 | 行為 |
---|---|
可讓您使用 $count 路徑區段和 $inlinecount 查詢選項,停用提交至資料服務的計算要求。如需詳細資訊,請參閱 OData:URI 慣例。 |
|
可讓您使用 $select 查詢選項,在提交至資料服務的要求中停用資料保護的支援。如需詳細資訊,請參閱 OData:URI 慣例。 |
|
可讓您在中繼資料中公開使用 IDataServiceMetadataProvider 介面定義之動態中繼資料提供者的資料類型。 |
|
可讓您指定資料服務執行階段是否應將包含在承載中的型別,轉換成要求所指定的實際屬性型別。 |
|
可讓您指定是否要在刪除兩個實體間的關聯性時,叫用註冊的變更攔截器。 |
|
可讓您限制單一批次中允許的變更集與查詢作業數目。如需詳細資訊,請參閱 OData:批次和批次作業 (WCF 資料服務)。 |
|
可讓您限制單一變更集中包含的變更數。如需詳細資訊,請參閱 HOW TO:啟用資料服務結果的分頁 (WCF Data Services)。 |
|
可讓您使用 $expand 查詢運算子限制包含在單一要求中的相關實體數目,進而限制回應的大小。如需詳細資訊,請參閱請參閱 OData: URI 慣例和載入延後的內容 (WCF 資料服務)。 |
|
可讓您使用 $expand 查詢運算子限制包含在單一要求中的相關實體圖形深度,進而限制回應的大小。如需詳細資訊,請參閱請參閱 OData: URI 慣例和載入延後的內容 (WCF 資料服務)。 |
|
可讓您限制單一 POST 要求中可包含及插入的實體數目。 |
|
定義資料服務所使用的 Atom 通訊協定版本。當 MaxProtocolVersion 的值設定為小於 DataServiceProtocolVersion 的最大值時,存取資料服務的用戶端就無法使用 WCF Data Services 的最新功能。如需詳細資訊,請參閱使用 HTML 使用 WCF Data Services 的多個版本。 |
|
可讓您限制以資料摘要傳回之每個實體集中的實體數目來限制回應的大小。 |
|
將資料型別加入至按資料服務辨識的型別清單。 |
|
設定資料服務中可用之實體集資源的存取權限。可提供星號 (*) 值給名稱參數,將所有剩餘實體集的存取權限設為相同層級。建議您設定實體集的存取權,以提供最少權限來存取用戶端應用程式所需的資料服務資源。如需詳細資訊,請參閱保護 WCF Data Services 的安全。如需給定 URI 和 HTTP 動作所需的最少存取權範例,請參閱Minimum Resource Access Requirements一節中的表格。 |
|
設定實體集資源的最大頁面大小。如需詳細資訊,請參閱 HOW TO:啟用資料服務結果的分頁 (WCF Data Services)。 |
|
設定在資料服務中定義的服務作業存取權限。如需詳細資訊,請參閱服務作業和攔截器 (ADO.NET 資料服務架構)。可提供星號 (*) 值給名稱參數,將所有服務作業的存取權限設為相同層級。建議您設定服務作業的存取權限,以提供最少權限給用戶端應用程式所需的資料服務資源。如需詳細資訊,請參閱保護 WCF Data Services 的安全。 |
|
此組態屬性可讓您在錯誤回應訊息中傳回詳細資訊,更加輕鬆地疑難排解資料服務問題。此選項不適用於實際執行環境。如需詳細資訊,請參閱開發和部署 WCF Data Services。 |
最少資源存取需求
下表詳述為了執行特定作業所必須授與的最少實體集權限。路徑範例是根據當您完成快速入門時所建立的 Northwind 資料服務。因為 EntitySetRights 列舉和 ServiceOperationRights 列舉的定義方式是使用 FlagsAttribute 所定義,所以您可以使用邏輯 OR 運算子為單一實體集或作業指定多個權限。如需詳細資訊,請參閱 HOW TO:啟用資料服務的存取 (WCF 資料服務)。
路徑/動作 | GET | DELETE | MERGE | POST | PUT |
---|---|---|---|---|---|
|
不支援 |
不支援 |
不支援 |
||
|
ReadSingle 和WriteDelete |
ReadSingle 和WriteMerge |
N/A |
ReadSingle 和WriteReplace |
|
|
-和-
|
不支援 |
不支援 |
-和-
|
不支援 |
|
-和-
|
-和-
|
-和-
|
不支援 |
-和-
|
|
-和-
|
-和-
|
-和-
|
-和-
|
不支援 |
|
-和-
|
不支援 |
不支援 |
-和-
|
不支援 |
|
-和-
|
-和-
|
不支援 |
不支援 |
不支援 |
|
-和-
|
|
-和-
|
不支援 |
-和-
|
|
ReadMultiple |
不支援 |
不支援 |
不支援 |
不支援 |
|
ReadSingle |
不支援 |
WriteMerge |
不支援 |
WriteReplace |
|
ReadSingle |
WriteDelete |
不支援 |
不支援 |
不支援 |
|
ReadSingle |
ReadSingle 和WriteDelete |
WriteMerge |
不支援 |
WriteReplace |
|
ReadSingle |
不支援 |
不支援 |
不支援 |
WriteReplace |
|
-和-
|
不支援 |
不支援 |
|
不支援 |
|
-和-
|
不支援 |
不支援 |
不支援 |
不支援 |
1 在這個範例中,Address 表示 Customers 實體的複雜類型屬性,該實體具有名為 StreetAddress 的屬性。Northwind 資料服務所使用的模型不會明確定義這個複雜類型。當此資料模型是使用 Entity Framework 提供者所定義時,您可以使用 實體資料模型 工具來定義這類複雜類型。如需詳細資訊,請參閱 How to: Create and Modify Complex Types (Entity Data Model Tools)。
2 當傳回二進位大型物件 (BLOB) 的屬性定義為媒體資源時,便可支援這個 URI (此媒體資源屬於媒體連結輸入的實體,在此例中為 Customers)。如需詳細資訊,請參閱資料流處理提供者 (WCF Data Services)。
版本控制需求
下列資料服務組態行為需要 OData 通訊協定第 2 版或更新版本:
計數要求的支援。
用於投影之 $select 查詢選項的支援。
如需詳細資訊,請參閱使用 WCF Data Services 的多個版本。