Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le procedure in questo argomento consentono di utilizzare ADO.NET Data Services per creare e testare un servizio dati che esegue la connessione al database di esempio Northwind.
Per creare questo servizio dati di esempio, verificare innanzitutto che i componenti obbligatori, elencati nella sezione di questo argomento relativa ai prerequisiti, siano installati nel computer. Per creare questo servizio dati, attenersi alla procedura seguente:
Creare un'applicazione Web ASP.NET.
Creare un modello EDM (Entity Data Model) e connetterlo al database.
Creare il servizio dati nell'applicazione Web.
Attivare l'accesso al servizio dati.
Dopo avere creato e attivato il servizio dati mediante queste procedure, è possibile provare a eseguire il servizio dati di esempio implementato.
Prerequisiti
Per utilizzare il framework di ADO.NET Data Services per creare un servizio dati, è necessario che nel computer siano installati i componenti seguenti:
ADO.NET Data Services e ADO.NET Entity Framework. Entrambi vengono installati durante l'installazione di Microsoft .NET Framework 3.5 Service Pack 1 (SP1) o versioni successive.
Il framework di ADO.NET Data Services è costituito da componenti runtime e di accesso ai dati. Il componente runtime implementa la conversione URI, i formati di trasporto AtomPub e JSON e il protocollo dell'interazione. Il componente di accesso ai dati supporta la comunicazione tra i componenti utilizzando l'interfaccia IQueryable<T>. Un insieme di convenzioni esegue il mapping dei tipi CLR (Common Language Runtime) alla sintassi URI e ai protocolli del payload utilizzati da ADO.NET Data Services.
Strumenti di Entity Framework. Questi strumenti sono inclusi in Visual Studio 2008 Service Pack 1 (SP1).
Provider di accesso ai dati ADO.NET. Questi provider sono supportati da qualsiasi versione di Microsoft SQL Server 2005, tra cui SQL Server Express.
Il database di esempio Northwind. Per scaricare questo database di esempio, vedere la pagina di download dei database di esempio per SQL Server.
Creare l'applicazione Web ASP.NET
ADO.NET Data Services rappresenta una versione specializzata dei servizi di Windows Communication Foundation. ADO.NET Data Services viene eseguito nei siti ASP.NET.
Se si dispone già di un'applicazione Web ASP.NET e si preferisce aggiungere il servizio dati di esempio all'applicazione esistente, è possibile ignorare i passaggi seguenti e passare alla sezione successiva, "Creare il modello EDM".
Nota |
|---|
Nella procedura riportata di seguito vengono utilizzate le versioni Standard, Professional e Team System di Visual Studio 2008 SP1. Con Visual Studio Web Developer sarà necessario creare un nuovo sito Web anziché una nuova applicazione Web. |
Scegliere Nuovo nel menu File di Visual Studio, quindi selezionare Progetto.
Nella finestra di dialogo Nuovo progetto selezionare come linguaggio di programmazione Visual Basic o Visual C#.
Nel riquadro Modelli selezionare Applicazione Web ASP.NET.
Digitare un nome per il progetto, ad esempio SimpleDataService.
Fare clic su OK.
Creare il modello EDM
Per creare un modello EDM basato su un database relazionale mediante ADO.NET Entity Framework:
In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto ASP.NET appena creato, quindi scegliere Aggiungi nuovo elemento.
Nella finestra di dialogo Aggiungi nuovo elemento selezionare ADO.NET Entity Data Model.
Digitare Northwind come nome del modello di dati.
Northwind.edmx è il nome di file del modello di dati creato dalla Procedura guidata Entity Data Model. Nello schema del modello di dati creato viene eseguito il mapping uno-a-uno al database di esempio Northwind.
Nella Procedura guidata Entity Data Model selezionare Genera da database, quindi scegliere Avanti.
Connettere il modello di dati al database mediante uno dei passaggi seguenti, quindi scegliere Avanti:
Se non si dispone di una connessione al database già configurata, scegliere Nuova connessione e creare una nuova connessione.
NotaSe si utilizza SQL Server 2005, si consiglia di impostare l'opzione MultipleActiveResultSets su true. Se questa opzione non è impostata su true nella stringa di connessione, scegliere Avanzate nella finestra di dialogo Proprietà connessione, quindi individuare l'opzione MultipleActiveResultSets e impostarla su true.
—oppure—
Se si dispone di una connessione al database già configurata per connettersi al database Northwind, selezionarla dall'elenco delle connessioni.
Nella pagina finale della procedura guidata, selezionare le caselle di controllo relative a tutte le tabelle nel database e deselezionare le caselle di controllo relative a visualizzazioni e stored procedure.
Nella pagina finale della procedura guidata viene visualizzato l'elenco delle tabelle, visualizzazioni e stored procedure a cui è possibile accedere dal database. Per mantenere semplice il modello di dati creato in questo argomento, selezionare solo le tabelle.
Scegliere Fine per chiudere la procedura guidata.
La procedura guidata genera i file che rappresentano i metadati del database e li aggiunge al progetto.
Creare il servizio dati
La creazione di un servizio dati ADO.NET consente di distribuire il modello di dati creato nei passaggi precedenti come un servizio a cui è possibile accedere con protocollo IP.
Per creare il servizio dati:
In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto ASP.NET e quindi scegliere Aggiungi nuovo elemento.
Nella finestra di dialogo Aggiungi nuovo elemento selezionare ADO.NET Data Service.
NotaAssicurarsi di selezionare ADO.NET Data Service, anziché altre opzioni simili, quali Servizio Web.
Digitare Northwind come nome del servizio.
Visual Studio crea i markup XML e i file di codice per il nuovo servizio. La finestra dell'editor del codice viene visualizzata per impostazione predefinita. In Esplora soluzioni il servizio sarà denominato Northwind con estensione .svc.cs o .svc.vb.
Eseguire uno dei passaggi seguenti all'inizio del codice relativo al servizio dati per includere lo spazio dei nomi delle classi del modello di dati generate dalla Procedura guidata Entity Data Model:
Se l'applicazione ASP.NET utilizza Visual Basic, aggiungere l'istruzione
imports.Se l'applicazione ASP.NET utilizza C#, aggiungere l'istruzione
using.
Nel Visualizzatore oggetti di Visual Studio viene visualizzato lo spazio dei nomi derivato dal database utilizzato dal servizio dati. In questo esempio, il database è denominato Northwind e lo spazio dei nomi viene denominato NorthwindModel.
Individuare il commento "TODO" nel codice per il servizio dati e sostituirlo con il nome della classe generata dalla Procedura guidata Entity Data Model.
In questo esempio, il nome della classe generata dalla Procedura guidata Entity Data Model è NorthwindEntities nello spazio dei nomi NorthwindModel.
Attivare l'accesso al servizio dati
Per impostazione predefinita, il servizio dati non è in grado di accedere alle risorse. Prima che il servizio dati possa restituire i dati, è necessario attivare l'accesso in modo esplicito.
Per attivare l'accesso in lettura e scrittura a tutte le risorse associate al servizio, individuare la funzione InitializeService nella classe derivata da DataService. Aggiungere alla funzione il codice richiesto per impostare i diritti di risorse per il contenitore su Tutto. In C#, aggiungere la riga config.SetResourceContainerAccessRule("*", ResourceContainerRights.All) alla funzione InitializeService, come illustrato nel codice seguente:
using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;
using NorthwindModel;
namespace SimpleDataService
{
public class Northwind : DataService< NorthwindModel.NorthwindEntities >
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(IDataServiceConfiguration config)
{
// TODO: set rules to indicate which entity sets and
// service operations are visible and updatable.
// Use *(all sets) only for testing.
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
}
}
}
A questo punto, è possibile eseguire il servizio da Visual Studio. Premere F5 per avviare il server Web di sviluppo. Nella sezione successiva viene illustrato come utilizzare il servizio dati appena creato.
Provare il servizio dati
Ai fini di questo esempio, utilizzare un browser Web per interagire con il servizio dati. In questo modo sarà possibile sperimentare il funzionamento della sintassi di indirizzamento delle richieste e visualizzare i risultati. Un browser Web, tuttavia, non è il metodo che la maggior parte delle applicazioni utilizzano per interagire con il servizio dati completato e in uso. In genere, le applicazioni interagiscono con il servizio dati tramite linguaggi di codice o di script.
Nota |
|---|
Per ulteriori informazioni sulla sintassi HTTP utilizzata da ADO.NET Data Services, vedere Schema di indirizzamento semplice di dati con URI uniformi (framework di ADO.NET Data Services) e Applicazioni client di ADO.NET Data Services. |
Recuperare il documento di servizio predefinito
Il documento XML restituito dal servizio dati è, per impostazione predefinita, un documento di servizio AtomPub. AtomPub è il metodo di serializzazione predefinito. Per ulteriori informazioni sul protocollo ATOM, vedere il sito del team di ADO.NET Data Services.
Per richiedere il documento di servizio predefinito:
Aprire un browser Web e immettere un URI analogo al seguente, sostituendo il numero della porta in modo che corrisponda all'ambiente di sviluppo:
https://localhost:50781/northwind.svc
Se sono state impostate regole di accesso in base all'URI precedente, il servizio dati restituisce al browser il documento di servizio predefinito. Il documento contiene un elenco di set di entità che rappresentano i dati Northwind distribuiti dal servizio dati. Questo documento di servizio predefinito sarà simile all'esempio XML seguente:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<service xml:base="https://localhost:1365/Northwind.svc/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
<workspace>
<atom:title>Default</atom:title>
<collection href="Categories">
<atom:title>Categories</atom:title>
</collection>
<collection href="CustomerDemographics">
<atom:title>CustomerDemographics</atom:title>
</collection>
<collection href="Customers">
<atom:title>Customers</atom:title>
</collection>
<collection href="Employees">
<atom:title>Employees</atom:title>
</collection>
<collection href="Order_Details">
<atom:title>Order_Details</atom:title>
</collection>
<collection href="Orders">
<atom:title>Orders</atom:title>
</collection>
<collection href="Products">
<atom:title>Products</atom:title>
</collection>
<collection href="Region">
<atom:title>Region</atom:title>
</collection>
<collection href="Shippers">
<atom:title>Shippers</atom:title>
</collection>
<collection href="Suppliers">
<atom:title>Suppliers</atom:title>
</collection>
<collection href="Territories">
<atom:title>Territories</atom:title>
</collection>
</workspace>
</service>
Recuperare un set di entità
Per esplorare il contenuto del servizio dati, utilizzare come punto iniziale i set di entità del documento di servizio predefinito. Alcuni dei set di entità nel documento di servizio predefinito per il servizio dati di esempio includono, ad esempio, Products, Shippers e Territories. È possibile recuperare in modo semplice tutte le entità in uno di questi set di entità.
Per richiedere un elenco di prodotti:
Immettere l'URI seguente nel browser Web:
https://localhost/northwind.svc/Products
Aggiungendo /Products all'URI, vengono restituiti tutti i prodotti in archivio. Nel codice XML seguente vengono illustrati i primi quattro prodotti restituiti, ovvero un elenco parziale dei risultati:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="https://localhost:1365/Northwind.svc/" xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<title type="text">Products</title>
<id>https://localhost:1365/Northwind.svc/Products</id>
<updated>2008-05-22T16:42:14Z</updated>
<link rel="self" title="Products" href="Products" />
<entry m:type="NorthwindModel.Products">
<id>https://localhost:1365/Northwind.svc/Products(1)</id>
<title type="text"></title>
<updated>2008-05-22T16:42:14Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Products" href="Products(1)" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
type="application/atom+xml;type=entry" title="Categories" href="Products(1)/Categories" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details"
type="application/atom+xml;type=feed" title="Order_Details" href="Products(1)/Order_Details" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers"
type="application/atom+xml;type=entry" title="Suppliers" href="Products(1)/Suppliers" />
<content type="application/xml">
<m:properties>
<d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
<d:ProductID m:type="Edm.Int32">1</d:ProductID>
<d:ProductName>Chai</d:ProductName>
<d:QuantityPerUnit>10 boxes x 20 bags</d:QuantityPerUnit>
<d:ReorderLevel m:type="Edm.Int16">10</d:ReorderLevel>
<d:UnitPrice m:type="Edm.Decimal">18.0000</d:UnitPrice>
<d:UnitsInStock m:type="Edm.Int16">36</d:UnitsInStock>
<d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
</m:properties>
</content>
</entry>
<entry m:type="NorthwindModel.Products">
<id>https://localhost:1365/Northwind.svc/Products(2)</id>
<title type="text"></title>
<updated>2008-05-22T16:42:14Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Products" href="Products(2)" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
type="application/atom+xml;type=entry" title="Categories" href="Products(2)/Categories" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details"
type="application/atom+xml;type=feed" title="Order_Details" href="Products(2)/Order_Details" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers"
type="application/atom+xml;type=entry" title="Suppliers" href="Products(2)/Suppliers" />
<content type="application/xml">
<m:properties>
<d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
<d:ProductID m:type="Edm.Int32">2</d:ProductID>
<d:ProductName>Chang</d:ProductName>
<d:QuantityPerUnit>24 - 12 oz bottles</d:QuantityPerUnit>
<d:ReorderLevel m:type="Edm.Int16">25</d:ReorderLevel>
<d:UnitPrice m:type="Edm.Decimal">19.0000</d:UnitPrice>
<d:UnitsInStock m:type="Edm.Int16">28</d:UnitsInStock>
<d:UnitsOnOrder m:type="Edm.Int16">40</d:UnitsOnOrder>
</m:properties>
</content>
</entry>
<entry m:type="NorthwindModel.Products">
<id>https://localhost:1365/Northwind.svc/Products(3)</id>
<title type="text"></title>
<updated>2008-05-22T16:42:14Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Products" href="Products(3)" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
type="application/atom+xml;type=entry" title="Categories" href="Products(3)/Categories" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details"
type="application/atom+xml;type=feed" title="Order_Details" href="Products(3)/Order_Details" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers"
type="application/atom+xml;type=entry" title="Suppliers" href="Products(3)/Suppliers" />
<content type="application/xml">
<m:properties>
<d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
<d:ProductID m:type="Edm.Int32">3</d:ProductID>
<d:ProductName>Aniseed Syrup</d:ProductName>
<d:QuantityPerUnit>12 - 550 ml bottles</d:QuantityPerUnit>
<d:ReorderLevel m:type="Edm.Int16">25</d:ReorderLevel>
<d:UnitPrice m:type="Edm.Decimal">10.0000</d:UnitPrice>
<d:UnitsInStock m:type="Edm.Int16">65</d:UnitsInStock>
<d:UnitsOnOrder m:type="Edm.Int16">70</d:UnitsOnOrder>
</m:properties>
</content>
</entry>
<entry m:type="NorthwindModel.Products">
<id>https://localhost:1365/Northwind.svc/Products(4)</id>
<title type="text"></title>
<updated>2008-05-22T16:42:14Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Products" href="Products(4)" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
type="application/atom+xml;type=entry" title="Categories" href="Products(4)/Categories" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details"
type="application/atom+xml;type=feed" title="Order_Details" href="Products(4)/Order_Details" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers"
type="application/atom+xml;type=entry" title="Suppliers" href="Products(4)/Suppliers" />
<content type="application/xml">
<m:properties>
<d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
<d:ProductID m:type="Edm.Int32">4</d:ProductID>
<d:ProductName>Chef Anton's Cajun Seasoning</d:ProductName>
<d:QuantityPerUnit>48 - 6 oz jars</d:QuantityPerUnit>
<d:ReorderLevel m:type="Edm.Int16">0</d:ReorderLevel>
<d:UnitPrice m:type="Edm.Decimal">22.0000</d:UnitPrice>
<d:UnitsInStock m:type="Edm.Int16">6</d:UnitsInStock>
<d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
</m:properties>
</content>
</entry>
</feed>
Recuperare un'entità singola
In un set di entità è possibile recuperare non solo un elenco di entità, ma anche richiedere una determinata entità. L'URI di un'entità singola è costituito dall'URI di base del servizio seguito dal nome del set di entità e quindi dall'ID finale dell'entità. L'ID dell'entità è un valore chiave in parentesi.
Per richiedere il prodotto con ID 1:
Immettere l'URI seguente nel browser Web:
http://host/vdir/northwind.svc/Products(1)
L'URI immesso nel browser recupera il prodotto con ID 1. Nel codice XML seguente vengono illustrati i risultati di questa richiesta:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xml:base="https://localhost:1365/Northwind.svc/"
xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices"
xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
m:type="NorthwindModel.Products" xmlns="http://www.w3.org/2005/Atom">
<id>https://localhost:1365/Northwind.svc/Products(1)</id>
<title type="text"></title>
<updated>2008-05-22T16:47:12Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Products" href="Products(1)" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Categories"
type="application/atom+xml;type=entry" title="Categories" href="Products(1)/Categories" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details"
type="application/atom+xml;type=feed" title="Order_Details" href="Products(1)/Order_Details" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Suppliers"
type="application/atom+xml;type=entry" title="Suppliers" href="Products(1)/Suppliers" />
<content type="application/xml">
<m:properties>
<d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
<d:ProductID m:type="Edm.Int32">1</d:ProductID>
<d:ProductName>Chai</d:ProductName>
<d:QuantityPerUnit>10 boxes x 20 bags</d:QuantityPerUnit>
<d:ReorderLevel m:type="Edm.Int16">10</d:ReorderLevel>
<d:UnitPrice m:type="Edm.Decimal">18.0000</d:UnitPrice>
<d:UnitsInStock m:type="Edm.Int16">36</d:UnitsInStock>
<d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
</m:properties>
</content>
</entry>
Recuperare una relazione tra entità
In questo servizio dati di esempio, alcuni valori, ad esempio ProductName e UnitPrice, sono scalari. Altri valori, ad esempio Categories e Suppliers, rappresentano le entità finali delle proprietà di navigazione. Le proprietà di navigazione sono proprietà di collegamento per l'individuazione di entità correlate tramite un'associazione EDM.
L'entità Products, ad esempio, include le associazioni a entità che rappresentano sia Suppliers sia Categories. È possibile creare un URI che attraversa queste relazioni.
Per richiedere il fornitore del prodotto con ID 2:
Immettere l'URI seguente nel browser Web:
http://host/vdir/northwind.svc/Products(2)/Suppliers
Nel codice XML seguente vengono illustrati i risultati di questa richiesta:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xml:base="https://localhost:1365/Northwind.svc/"
xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices"
xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
m:type="NorthwindModel.Suppliers" xmlns="http://www.w3.org/2005/Atom">
<id>https://localhost:1365/Northwind.svc/Suppliers(1)</id>
<title type="text"></title>
<updated>2008-05-22T16:50:11Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Suppliers" href="Suppliers(1)" />
<link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Products"
type="application/atom+xml;type=feed" title="Products" href="Suppliers(1)/Products" />
<content type="application/xml">
<m:properties>
<d:Address>49 Gilbert St.</d:Address>
<d:City>London</d:City>
<d:CompanyName>Exotic Liquids</d:CompanyName>
<d:ContactName>Charlotte Cooper</d:ContactName>
<d:ContactTitle>Purchasing Manager</d:ContactTitle>
<d:Country>UK</d:Country>
<d:Fax m:null="true" />
<d:HomePage m:null="true" />
<d:Phone>(171) 555-2222</d:Phone>
<d:PostalCode>EC1 4SD</d:PostalCode>
<d:Region m:null="true" />
<d:SupplierID m:type="Edm.Int32">1</d:SupplierID>
</m:properties>
</content>
</entry>
Vedere anche
Concetti
Formato URI di indirizzamento delle risorse (framework di ADO.NET Data Services)
Requisiti HTTP comuni (framework di ADO.NET Data Services)