設定資料服務 (WCF Data Services)
有了 WCF Data Services,您就可以建立可公開 Open Data Protocol (OData) 摘要的資料服務。 這些摘要中的資料可以來自各種不同的資料來源。 WCF Data Services 會使用資料提供者,將此資料公開為 OData 摘要。 這些提供者包含 Entity Framework 提供者、反映提供者,以及一組自訂資料服務提供者介面。 提供者實作會針對此服務定義資料模型。 如需詳細資訊,請參閱資料服務提供者 (WCF Data Services)。
在 WCF Data Services 中,資料服務是繼承自 DataService<T> 類別的一種類別,其中資料服務的類型即為資料模型的實體容器。 此實體容器具有一個或多個可傳回 IQueryable<T> (用於存取資料模型中的資料集) 的屬性。
資料服務的行為由 DataServiceConfiguration 類別的成員及 DataServiceBehavior 類別的成員定義,可從 DataServiceConfiguration 類別的 DataServiceBehavior 屬性存取。 DataServiceConfiguration 類別會提供給資料服務所實作的 InitializeService 方法,如下列 Northwind 服務所示 (您會在完成快速入門時建立此服務):
Public Class Northwind
Inherits DataService(Of NorthwindEntities)
' This method is called only once to initialize service-wide policies.
Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
' Grant only the rights needed to support the client application.
config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead _
Or EntitySetRights.WriteMerge _
Or EntitySetRights.WriteReplace)
config.SetEntitySetAccessRule("Order_Details", EntitySetRights.AllRead _
Or EntitySetRights.AllWrite)
config.SetEntitySetAccessRule("Customers", EntitySetRights.AllRead)
End Sub
End Class
public class Northwind : DataService<NorthwindEntities>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{
// Grant only the rights needed to support the client application.
config.SetEntitySetAccessRule("Orders", EntitySetRights.AllRead
| EntitySetRights.WriteMerge
| EntitySetRights.WriteReplace);
config.SetEntitySetAccessRule("Order_Details", EntitySetRights.AllRead
| EntitySetRights.AllWrite);
config.SetEntitySetAccessRule("Customers", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion =
System.Data.Services.Common.DataServiceProtocolVersion.V3;
}
}
資料服務組態設定
DataServiceConfiguration 類別可讓您指定下列資料服務行為:
成員 |
行為 |
---|---|
可讓您停用包含 any 和 all 運算子之查詢的支援。 |
|
可讓您使用 $count 路徑區段和 $inlinecount 查詢選項,停用送出至資料服務的計數要求。 如需詳細資訊,請參閱 OData:URI 慣例。 |
|
可讓您使用 $select 查詢選項,在提交至資料服務的要求中停用資料保護的支援。 如需詳細資訊,請參閱 OData:URI 慣例。 |
|
可讓您停用在查詢 URI 中提供空間常值的支援。 |
|
可讓您使用註釋將詞彙套用至資料模型。 AnnotationsBuilder 屬性會傳回委派,好讓您為資料模型提供一個或多個模型註釋當做 IEdmModel 執行個體的集合 (此模型會當做 IEdmModel 執行個體提供給委派)。 如需詳細資訊,請參閱 WCF Data Services 中的詞彙文章。 |
|
可讓您在服務回應 $metadata 端點的要求之前,停用資料模型的驗證。 |
|
可讓您在中繼資料中公開使用 IDataServiceMetadataProvider 介面定義之動態中繼資料提供者的資料類型。 |
|
可讓您指定資料服務執行階段是否應將包含在承載中的類型,轉換成要求所指定的實際屬性類型。 |
|
可讓您指定具體處理實體之間關聯性 (也稱為關聯) 的連結元素是否包含在資料服務的回應中。 系統會使用 $links 運算子處理關聯。 如需詳細資訊,請參閱 3.2。處理 OData 通訊協定中實體之間的連結。 資料服務一律會傳回處理相關實體的連結元素,即使 IncludeAssociationLinksInResponse 為 false 也是如此。 |
|
可讓您指定是否要在刪除兩個實體間的關聯性時,叫用註冊的變更攔截器。 |
|
可讓您限制單一批次中允許的變更集與查詢作業數目。 如需詳細資訊,請參閱 OData:批次和批次作業 (WCF Data Services)。 |
|
可讓您限制單一變更集中包含的變更數。 如需詳細資訊,請參閱 HOW TO:啟用資料服務結果的分頁 (WCF Data Services)。 |
|
可讓您使用 $expand 查詢運算子限制包含在單一要求中的相關實體數目,進而限制回應的大小。 如需詳細資訊,請參閱 請參閱 OData:URI 慣例與載入延後的內容 (WCF Data Services)。 |
|
可讓您使用 $expand 查詢運算子限制包含在單一要求中的相關實體圖形深度,進而限制回應的大小。 如需詳細資訊,請參閱 請參閱 OData:URI 慣例與載入延後的內容 (WCF Data Services)。 |
|
可讓您限制單一 POST 要求中可包含及插入的實體數目。 |
|
定義資料服務所使用的 Atom 通訊協定版本。 當 MaxProtocolVersion 的值設定為小於 DataServiceProtocolVersion 的最大值時,存取資料服務的用戶端就無法使用 WCF Data Services 的最新功能。 如需詳細資訊,請參閱 資料服務版本控制 (WCF Data Services). |
|
可讓您限制以資料摘要傳回之每個實體集中的實體數目來限制回應的大小。 |
|
將資料型別加入至按資料服務辨識的型別清單。 |
|
設定資料服務中可用之實體集資源的存取權限。 可提供星號 (*) 值給名稱參數,將所有剩餘實體集的存取權限設為相同層級。 建議您設定實體集的存取權,以提供最少權限來存取用戶端應用程式所需的資料服務資源。 如需詳細資訊,請參閱保護 WCF Data Services 的安全。 如需給定 URI 和 HTTP 動作所需的最少存取權範例,請參閱Minimum Resource Access Requirements一節中的表格。 |
|
設定實體集資源的最大頁面大小。 如需詳細資訊,請參閱 HOW TO:啟用資料服務結果的分頁 (WCF Data Services)。 |
|
設定在資料服務中定義之服務動作的存取權限。 如需詳細資訊,請參閱使用 OData 動作實作伺服器端行為。 可提供星號 (*) 值給 name 參數,將所有服務動作的存取權限設為相同層級。 建議您設定服務動作的存取權限,以提供最少權限給用戶端應用程式所需的資料服務資源。 如需詳細資訊,請參閱保護 WCF Data Services 的安全。 |
|
設定在資料服務中定義的服務作業存取權限。 如需詳細資訊,請參閱服務作業 (WCF Data Services)。 可提供星號 (*) 值給 name 參數,將所有服務作業的存取權限設為相同層級。 建議您設定服務作業的存取權限,以提供最少權限給用戶端應用程式所需的資料服務資源。 如需詳細資訊,請參閱保護 WCF Data Services 的安全。 |
|
此組態屬性可讓您在錯誤回應訊息中傳回詳細資訊,更加輕鬆地疑難排解資料服務問題。 此選項不適用於實際執行環境。 如需詳細資訊,請參閱開發和部署 WCF Data Services。 |
最少資源存取需求
下表詳述為了執行特定作業所必須授與的最少實體集權限。 路徑範例是根據當您完成快速入門時所建立的 Northwind 資料服務。 因為 EntitySetRights 列舉和 ServiceOperationRights 列舉的定義方式是使用 FlagsAttribute 所定義,所以您可以使用邏輯 OR 運算子為單一實體集或作業指定多個權限。 如需詳細資訊,請參閱 HOW TO:啟用資料服務的存取 (WCF Data Services)。
URI 路徑和查詢選項 |
GET |
DELETE |
MERGE |
POST |
PUT |
---|---|---|---|---|---|
/Customers |
不支援 |
不支援 |
不支援 |
||
/Customers('ALFKI') |
N/A |
||||
/Customers('ALFKI')/Orders |
Customers:ReadSingle -和- Orders:ReadMultiple |
不支援 |
不支援 |
Customers:ReadSingle 和 WriteMerge 或 WriteReplace -和- Orders: 和WriteAppend |
不支援 |
/Customers('ALFKI')/Orders(10643) |
Customers:ReadSingle -和- Orders:ReadSingle |
Customers:ReadSingle -和- Orders:ReadSingle 和 WriteDelete |
Customers:ReadSingle -和- Orders:ReadSingle 和 WriteMerge |
不支援 |
Customers:ReadSingle -和- Orders:ReadSingle 和 WriteReplace |
/Orders(10643)/Customer |
Customers:ReadSingle -和- Orders:ReadSingle |
Customers:ReadSingle 和 WriteDelete -和- Orders:ReadSingle |
Customers:ReadSingle 和 WriteMerge; -和- Orders:ReadSingle |
Customers:WriteAppend -和- Orders:WriteAppend 和 ReadSingle |
不支援 |
/Customers('ALFKI')/$links/Orders |
Customers:ReadSingle -和- Orders:ReadMultiple |
不支援 |
不支援 |
Customers:ReadSingle 和 WriteMerge 或 WriteReplace -和- Orders:ReadSingle |
不支援 |
/Customers('ALFKI')/$links/Orders(10643) |
Customers:ReadSingle -和- Orders:ReadSingle |
Customers:ReadSingle 和 WriteMerge 或 WriteReplace -和- Orders:ReadSingle |
不支援 |
不支援 |
不支援 |
/Orders(10643)/$links/Customer |
Customers:ReadSingle -和- Orders:ReadSingle |
Orders:ReadSingle 和 WriteMerge 或 WriteReplace |
Customers:ReadSingle -和- Orders:ReadSingle 和 WriteMerge |
不支援 |
Customers: ReadSingle; -和- Orders:ReadSingle 和 WriteReplace |
/Customers/$count |
不支援 |
不支援 |
不支援 |
不支援 |
|
/Customers('ALFKI')/ContactName |
不支援 |
不支援 |
|||
/Customers('ALFKI')/Address/StreetAddress/$value1 |
不支援 |
不支援 |
不支援 |
||
/Customers('ALFKI')/ContactName/$value |
不支援 |
||||
/Customers('ALFKI')/$value2 |
不支援 |
不支援 |
不支援 |
||
/Customers?$select=Orders/*&$expand=Orders |
Customers:ReadSingle -和- Orders:ReadMultiple |
不支援 |
不支援 |
Customers:WriteAppend |
不支援 |
/Customers('ALFKI')?$select=Orders/*&$expand=Orders |
Customers:ReadSingle -和- Orders:ReadMultiple |
不支援 |
不支援 |
不支援 |
不支援 |
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 通訊協定第 3 版或更新版本:
支援將關聯性連結元素包含在回應摘要中。
支援 any 和 all 查詢運算子。
支援定義服務動作和函數。
支援空間資料類型。
藉由定義資料模型註釋來支援詞彙。
針對 $metadata 端點要求來支援停用資料模型驗證。
下列資料服務組態行為需要 OData 通訊協定第 2 版或更新版本:
支援計數要求與查詢投影需要 OData 通訊協定第 2.0 版或更新版本。
支援投影的 $select 查詢選項需要 OData 通訊協定第 2.0 版或更新版本。
如需詳細資訊,請參閱資料服務版本控制 (WCF Data Services)。