Host del servizio dati (framework di ADO.NET Data Services)

I servizi ADO.NET Data Services non sono servizi di rete autonomi. . Un servizio ADO.NET Data Service non si associa a un socket di rete e non resta in attesa delle richieste in entrata ai punti di ingresso REST (Representational State Transfer). È, al contrario, un componente ospitato in un ambiente come Windows Communication Foundation (WCF), che fornisce le principali funzionalità di rete del server. L'host gestisce le interazioni dirette con la rete e supporta la memorizzazione nella cache, la scalabilità e i moduli di autenticazione.

In ADO.NET Data Services viene definita un'interfaccia hosting generica, IDataServiceHost, che astrae l'implementazione da un host specifico. Ciò consente di eseguire ADO.NET Data Services in un intervallo di ambienti host, a partire da implementazioni sul lato server HTTP personalizzate quali WCF, ASP.NET e IIS.

Nota   in caso di utilizzo di un host ASP.NET i caratteri (:) e (/) sono bloccati e, se utilizzati, generano il codice di risposta 400 Richiesta non valida. L'installazione della correzione risolve il problema per il carattere due punti (:).

Gli esempi riportati nelle sezioni seguenti presuppongono un servizio ADO.NET Data Service definito come segue:

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

Hosting di un servizio ADO.NET Data Service tramite Windows Communication Foundation (WCF) e ASP.NET

I servizi ADO.NET Data Services possono essere ospitati come endpoint WCF in un'applicazione ASP.NET. In questa implementazione, WCF e ASP.NET gestiscono l'interazione di rete per un servizio ADO.NET Data Service.

Per ospitare un servizio ADO.NET Data Service in WCF all'interno di un'applicazione ASP.NET, definire un nuovo endpoint WCF come segue:

  1. Creare un nuovo endpoint del servizio WCF, costituito dal file .svc.

  2. Nella dichiarazione ServiceHost:

    • Il valore dell'attributo Factory deve essere System.Data.Services.DataServiceHostFactory.

    • Il valore dell'attributo Service deve essere un nome della classe dello spazio dei nomi completo del servizio dati da esporre.

MyAstoriaDataService.svc:
<%@ ServiceHost Language="C#"
 Factory="System.Data.Services.DataServiceHostFactory"
 Service="MyAstoriaDataService.MyAstoriaDataService"%> 

Hosting di un servizio ADO.NET Data Service tramite Windows Communication Foundation (WCF)

I servizi ADO.NET Data Services possono essere ospitati utilizzando le classi WCF ServiceHost o WebServiceHost. Nell'esempio seguente viene illustrato un servizio dati che utilizza la classe 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();
        }
    }
}

Vedere anche

Concetti

Modello di dati (framework di ADO.NET Data Services)
Guida introduttiva al servizio dati (framework di ADO.NET Data Services)