数据服务宿主(ADO.NET 数据服务框架)

ADO.NET 数据服务不是独立的网络服务。 ADO.NET 数据服务不会绑定到网络套接字并侦听传入的针对其具象状态传输 (REST) 入口点的请求。相反,ADO.NET 数据服务是一种驻留在提供核心服务器网络工具的环境(例如 Windows Communication Foundation (WCF))中的组件。宿主将处理与网络的直接交互并支持缓存、可伸缩性和身份验证模块。

ADO.NET 数据服务定义一个通用宿主接口 IDataServiceHost,该接口从特定的宿主提取其实现。这样,ADO.NET 数据服务就可以利用自定义 HTTP 服务器端实现(例如 WCF、ASP.NET 和 IIS)在一系列宿主环境中运行。

注意   当使用 ASP.NET 宿主时,字符 (:)和 (/) 将被阻止;如果使用了这两个字符,则将导致生成“400 错误的请求”响应代码。安装修补程序可解决冒号 (:) 的问题。

以下各部分中的示例假设 ADO.NET 数据服务的定义如下:

namespace MyDataService 
{
    public class MyAstoriaDataService :
              DataService<NorthwindModel.NorthwindEntities> 
    { // service implementation } 
}

使用 Windows Communication Foundation (WCF) 和 ASP.NET 承载 ADO.NET 数据服务

ADO.NET 数据服务可作为 WCF 终结点承载在 ASP.NET 应用程序内。在此实现中,WCF 和 ASP.NET 处理 ADO.NET 数据服务的网络交互。

若要在 ASP.NET 应用程序内的 WCF 中承载 ADO.NET 数据服务,请定义一个新的 WCF 终结点,如下所示:

  1. 新建一个 WCF 服务终结点,即 .svc 文件。

  2. ServiceHost 声明中:

    • Factory 属性的值必须是 System.Data.Services.DataServiceHostFactory

    • Service 属性必须是要公开的数据服务的完全限定命名空间类名称。

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 数据服务框架)