ADO.NET 資料服務並非獨立的網路服務。 . ADO.NET 資料服務不會繫結和接聽網路通訊端 (Socket),以便將要求內送至其具像狀態傳輸 (REST) 進入點 (Entry Point)。不過,ADO.NET 資料服務是裝載 (Host) 在 Windows Communication Foundation (WCF) 等環境中的元件,可提供核心伺服器網路連接機能。此主應用程式 (Host) 會處理與網路的直接互動並且支援快取、延展性 (Scalability) 和驗證模組。
ADO.NET 資料服務會定義泛型裝載介面 IDataServiceHost,以便從特定主應用程式中擷取其實作 (Implementation)。這樣做可以讓 ADO.NET 資料服務根據自訂 HTTP 伺服器端實作 (例如 WCF、ASP.NET 和 IIS),在主應用程式環境的範圍中執行。
注意:使用 ASP.NET 主應用程式時,(:) 和 (/) 字元會被封鎖而且將導致「400 錯誤要求」回應碼 (如果使用的話)。安裝<FIX>可以解決冒號 (:) 的問題。
下列各節中的範例會假設 ADO.NET 資料服務的定義方式如下:
namespace MyDataService
{
public class MyAstoriaDataService :
DataService<NorthwindModel.NorthwindEntities>
{ // service implementation }
}
使用 Windows Communication Foundation (WCF) 和 ASP.NET 來裝載 ADO.NET 資料服務
ADO.NET 資料服務可以裝載成 ASP.NET 應用程式內部的 WCF 端點。在這個實作中,WCF 和 ASP.NET 會處理 ADO.NET 資料服務的網路互動。
若要在 ASP.NET 應用程式內部的 WCF 中裝載 ADO.NET 資料服務,請依照下列方式定義新的 WCF 端點:
建立新的 WCF 服務端點。這是 .svc 檔案。
在 ServiceHost 宣告中:
Factory 屬性的值必須是 System.Data.Services.DataServiceHostFactory。
Service 屬性的值必須是要公開 (Expose) 之資料服務的完整命名空間 (Namespace) 類別 (Class) 名稱。
MyAstoriaDataService.svc:
<%@ ServiceHost Language="C#"
Factory="System.Data.Services.DataServiceHostFactory"
Service="MyAstoriaDataService.MyAstoriaDataService"%>
使用 Windows Communication Foundation (WCF) 來裝載 ADO.NET 資料服務
您可以使用 WCF ServiceHost 或 WebServiceHost 類別來裝載 ADO.NET 資料服務。下列範例將顯示使用 WebServiceHost 類別的資料服務。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel.Web;
using System.Data.Services;
namespace SelfHost
{
class Program
{
static void Main(string[] args)
{
Uri baseAddress =
new Uri("https://localhost:8000/dataservice");
HostWithWebServiceHost(baseAddress);
Console.WriteLine(
"Host running - https://localhost:8000/dataservice");
Console.WriteLine("Press any key to shut down service...");
Console.ReadKey();
host.Close();
}
private static void HostWithWebServiceHost(Uri baseAddress)
{
WebServiceHost host = new WebServiceHost(typeof(MyAstoriaDataService),
baseAddress);
WebHttpBinding binding = new WebHttpBinding();
host.AddServiceEndpoint(
typeof(System.Data.Services.IRequestHandler), binding,
"WebServiceHost");
host.Open();
}
}
}