共用方式為


資料服務主應用程式 (ADO.NET 資料服務架構)

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 端點:

  1. 建立新的 WCF 服務端點。這是 .svc 檔案。

  2. 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();
        }
    }
}

另請參閱

概念

資料模型 (ADO.NET 資料服務架構)
資料服務快速入門 (ADO.NET 資料服務架構)