Esporta (0) Stampa
Espandi tutto

Creare un'applicazione per query flessibili

Aggiornamento: febbraio 2014

 

 

I riferimenti al servizio in Visual Studio consentono di utilizzare a livello di codice i set di dati di Marketplace specificati dall'editore come set di dati per query flessibili.

ImportantImportante
Il codice di un riferimento al servizio non deve essere modificato. La modifica può infatti provocare errori di funzionamento o effetti collaterali. Inoltre, le modifiche verranno sovrascritte ad ogni aggiornamento del riferimento al servizio.

Prima di procedere, verificare di avere a disposizione quanto segue:

  • Un account Windows Live ID valido. Se non si dispone di un Windows Live ID, aprire la home page di Windows Live ed effettuare l'iscrizione.

  • Un account Marketplace valido. Se non si dispone di un account Marketplace, andare all'argomento Creare un account Marketplace personale e seguire le istruzioni.

  • Una sottoscrizione al set di dati per query flessibili di Marketplace che si desidera utilizzare nell'applicazione. Se non si è effettuata la sottoscrizione a un set di dati per query flessibili, andare all'argomento Effettuare la sottoscrizione a un'offerta di dati e seguire le istruzioni.

 

Sezione Descrizione

Passaggio 1: creare il progetto in Visual Studio

Viene descritta la procedura da eseguire in Visual Studio per avviare un nuovo progetto di console per Marketplace.

Passaggio 2: aggiungere il riferimento al servizio per il servizio dati

Viene descritta la procedura da eseguire per aggiungere un riferimento al servizio per l'utilizzo dei dati di Marketplace.

Passaggio 3: utilizzare dati con codice gestito

Viene illustrato il codice scritto per utilizzare un set di dati per query flessibili di Marketplace.

Codice completato

Applicazione console completa in C# e VB.

Metadati

Viene illustrato un esempio di metadati XML per il set di dati per query flessibili.

  1. Fare clic sul pulsante Start, quindi cercare Visual Studio.

  2. Fare clic con il pulsante destro del mouse su Visual Studio.

  3. Scegliere Esegui come amministratore dal menu a discesa.

  4. Quando viene chiesto se si desidera consentire al programma (devenv.exe) di apportare modifiche al computer, fare clic su .

  1. Nella pagina iniziale di Visual Studio selezionare Nuovo progetto.

  2. Selezionare Visual C# e Applicazione console (Visual Basic e Applicazione console se si preferisce Visual Basic) nella finestra di dialogo Nuovo progetto.

  3. Nell'elenco a discesa presente a sinistra nella parte superiore della finestra di dialogo Nuovo progetto selezionare .NET Framework 4.

    In Visual Studio 2010 viene visualizzato .NET Framework 4 per impostazione predefinita. Se si utilizza una versione precedente di Visual Studio e .NET Framework 4 non è installato, accedere alla pagina di download di .NET Framework 4 per scaricare e installare il programma.

  4. Assegnare al progetto un nome significativo. Per questo progetto utilizzare ad esempio il nome USCrime2006and2007.

  5. Fare clic su OK.

  6. Aggiungere il codice seguente, necessario per l'autenticazione dell'accesso al set di dati, in cima a Program.cs (Program.vb).

    using System.Net; // needed for authentication
    

Dopo aver avviato Visual Studio come amministratore e aver creato una nuova applicazione console (passaggio 1), aggiungere il riferimento al servizio per il servizio dati che si desidera utilizzare.

  1. Accedere alla home page di Marketplace.

  2. Fare clic sulla scheda Dati personali.

  3. Cercare il servizio dati 2006 - 2008 Crime in the United States.

  4. Fare clic su Utilizza a destra del nome del set di dati. Verrà visualizzata la pagina dei dettagli relativa al set di dati.

  5. Scorrere la pagina verso il basso fino a visualizzare le schede sotto Scopri come utilizzare i dati in Visual Studio.

  6. Fare clic sulla scheda Dettagli.

  7. Cercare la voce URL radice servizio.


    Figura 1 – URL radice del servizio

  8. Copiare l'URL radice del servizio negli Appunti.

  1. Tornare al progetto di Visual Studio.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti.

  3. Scegliere Aggiungi riferimento al servizio dal menu a discesa.

  4. Incollare l'URL radice del servizio dagli Appunti nell'elenco a discesa Indirizzo.

  5. Fare clic su Vai.
    Attendere alcuni minuti in modo che nella casella di testo Servizi venga inserito il servizio disponibile per il progetto.

  6. Nella casella di testo Spazio dei nomi immettere un nome significativo per lo spazio dei nomi.
    Esempio: DataGovCrimes.

  7. Fare clic su OK.
    Il nome del riferimento al servizio verrà visualizzato nell'area Riferimenti in Esplora soluzioni.

  1. Selezionare Program.cs (Program.vb) nel riquadro Codice di Visual Studio.

  2. Aggiungere l'istruzione seguente in modo da rendere il riferimento al servizio accessibile per l'applicazione.

    noteNota
    Utilizzare lo spazio dei nomi del programma nonché il nome dello spazio dei nomi del riferimento al servizio creato al precedente punto 6.

    using USCrime2006and2007.DataGovCrimes; // using ApplicationName.ServiceReferenceName
    

  1. Creare una classe pubblica, CrimeData, nello spazio dei nomi del progetto.

  2. Creare due variabili private all'interno della classe.

    • Un URI per l'accesso al servizio.

    • Un contenitore in cui vengono memorizzate le credenziali del servizio nel contesto del servizio stesso.

      1. Andare alla pagina dei dettagli.

      2. Fare clic su Get Started with this Dataset (Inizia con questo set di dati).

      3. Fare clic sulla scheda Overview (Panoramica).
        Verranno visualizzati il nome del set di entità e il nome della raccolta di entità.

    
    class CrimeData
    {
        private Uri serviceURI;
        private datagovCrimesContainer context;
    }  // end class CrimeData
    
    
  3. Creare un costruttore per la classe CrimeData.
    Il costruttore inizializza le due variabili private e le credenziali utente.
    SERVICE_ROOT_URL è il collegamento HTTPS copiato precedentemente negli Appunti. (Vedere Ottenere l'URL radice del servizio.)
    context è il contenitore del servizio utilizzato per le credenziali utente.
    La proprietà IgnoreMissingProperties è impostata su true per rendere il client più affidabile quando vengono aggiunte proprietà al tipo sul server. Per ulteriori informazioni, fare riferimento alla documentazione di MSDN.
    USER_ID è il Live ID in uso.
    SECURE_ACCOUNT_KEY è la chiave dell'account Marketplace utilizzata per l'applicazione. Vedere Gestire un account Marketplace.

    
    class CrimeData
    {
        private Uri serviceURI;
        private datagovCrimesContainer context;
    
        // constructor for the CrimeData class
        public CrimeData()  
        {
            serviceURI = new Uri(SERVICE_ROOT_URL);
            context = new datagovCrimesContainer(serviceURI);
            context.IgnoreMissingProperties = true;
            context.Credentials = new NetworkCredential(USER_ID,
                                                        SECURE_ACCOUNT_ID); // Your Marketplace account key
        }  // end constructor
    
    }  // end class CrimeData
    
    
  4. Creare un metodo pubblico nella classe, che sia in grado di restituire un elenco generico. Per il programma corrente, il tipo di elenco generico è CityCrime.
    Il metodo creato esegue una query sul servizio e, se l'operazione ha esito positivo, restituisce il set di risultati sotto forma di elenco. Se la query per qualsiasi motivo ha esito negativo, il metodo restituisce un valore null (Nothing).

    
    class CrimeData
    {
        private Uri serviceURI;
        private datagovCrimesContainer context;
    
        // constructor for the CrimeData class
        public CrimeData()
        {
            serviceURI = new Uri(SERVICE_ROOT_URL);
            context = new datagovCrimesContainer(serviceURI);
            context.IgnoreMissingProperties = true;
            context.Credentials = new NetworkCredential(USER_ID,
                                                        SECURE_ACCOUNT_ID);
        }  // end constructor
    
        // -- public method that returns a list of crime data
        public IList<CityCrime> GetCrimeData()
        {
            IEnumerable<CityCrime> query = context.CityCrime.Where(crime => crime.City == "Newport").OrderBy(crime => crime.Year);
    
            try
            {
                return query.ToList();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
                return null;
            }  // end try
    
        }  // end function GetCrimeData
    
    }  // end class CrimeData
    
    

    È possibile eseguire una qualsiasi query LINQ valida di Marketplace, che può includere facoltativamente il filtro where (Where) e/o orderby (Order By).
    Per ulteriori informazioni sulle query LINQ, vedere Espressioni di query LINQ (Guida per programmatori C#) (LINQ in Visual Basic).
    Per ulteriori informazioni sulle limitazioni delle query LINQ in Marketplace, vedere Opzioni di query OData supportate.

    Di seguito sono riportate le query LINQ valide in Marketplace.

    
    query = from crimes in context.CityCrime
                where crimes.City == "Newport" 
                orderby crimes.Year Ascending
                select crimes;
    //  this query could also be written as
    //  IEnumerable<CityCrime> query = context.CityCrime.Where(crime => crime.City == "Newport").OrderBy(crime => crime.Year);
    
    
  5. Scrivere il codice in Main(), che si serve della classe CrimeData e del metodo GetCrimeData() per utilizzare e visualizzare i dati.

    
    using System.Net;
    using USCrime2006and2007.DataGovCrimes; // using ApplicationName.ServiceReferenceName
    
    namespace USCrime2006and2007
    {
       class Program
       {
          public static void Main(string[] args)
          {
              IList<CityCrime> crimeList;  // CityCrime is the entity type returned by the service
              CrimeData crimeData = new CrimeData();
    
              crimeList = crimeData.GetCrimeData();
    
              if (crimeList != null)
              {
                  Console.WriteLine("{0,4} {1,-12} {2,-15} {3,10} {4,13}","Year",
                                                                          "City",
                                                                          "State",
                                                                          "Population",
                                                                          "Violent Crime");
    
                  foreach (CityCrime c in crimeList)
                  {
                      Console.WriteLine("{0,4} {1,-12} {2,-15} {3,10} {4,13}", c.Year, 
                                                                               c.City, 
                                                                               c.State, 
                                                                               c.Population,
                                                                               c.ViolentCrime);
                  } // end foreach
    
              }  // end if
    
              Console.Write("Tap any key to exit. ");
              Console.ReadKey();
    
          }  // end Main
    
        }  // end class Program
    
    }  // end namespace
    
    


using System.Net;
using USCrime2006and2007.DataGovCrimes; // using ApplicationName.ServiceReferenceName

namespace USCrime2006and2007
{
   class Program
   {
      public static void Main(string[] args)
      {
          IList<CityCrime> crimeList;  // CityCrime is the entity type returned by the service
          CrimeData crimeData = new CrimeData();

          crimeList = crimeData.GetCrimeData();

          if (crimeList != null)
          {
              Console.WriteLine("{0,4} {1,-12} {2,-15} {3,10} {4,13}","Year",
                                                                      "City",
                                                                      "State",
                                                                      "Population",
                                                                      "Violent Crime");

              foreach (CityCrime c in crimeList)
              {
                  Console.WriteLine("{0,4} {1,-12} {2,-15} {3,10} {4,13}", c.Year, 
                                                                           c.City, 
                                                                           c.State, 
                                                                           c.Population,
                                                                           c.ViolentCrime);
              } // end foreach

          }  // end if

          Console.Write("Tap any key to exit. ");
          Console.ReadKey();

      }  // end Main

    }  // end class Program

    class CrimeData
    {
        private Uri serviceUri;
        private datagovCrimesContainer context;

        // constructor for the CrimeData class
        public CrimeData()
        {
            serviceUri = new Uri(SERVICE_ROOT_URL);
            context = new datagovCrimesContainer(serviceUri);
            context.IgnoreMissingProperties = true;
            context.Credentials = new NetworkCredential USER_ID,
                                                        SECURE_ACCOUNT_KEY); // Your Marketplace account key
        }  // end constructor
 
        // – public function that returns a list of crime data
        public IList<CityCrime> GetCrimeData()
        {
            IEnumerable<CityCrime> query = context.CityCrime.Where(crime => crime.City == "Newport").OrderBy(crime => crime.Year);
 
            try
            {
                return query.ToList();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
                return null;
            }  // end try

        }  // end function

    }  // end class CrimeData

}  // end namespace

I metadati del set di dati forniscono informazioni a IntelliSense durante la scrittura del codice. Se l'ambiente IDE non supporta IntelliSense o si verifica un errore di funzionamento di IntelliSense, è possibile ottenere i metadati dal servizio.

  1. Ottenere l'URL radice del servizio per il set di dati.
    Per istruzioni, vedere la precedente sezione Ottenere l'URL radice del servizio.

  2. Aggiungere /$metadata in fondo all'URL radice del servizio.
    Se ad esempio tale URL è https://api.datamarket.azure.com/Data.ashx/fabrikam.com/inventory, l'URL dei metadati sarà https://api. datamarket.azure.com/Data.ashx/fabrikam.com/inventory/$metadata.

  3. Nel browser accedere all'URL dei metadati.

  4. Analizzare i metadati.
    Di seguito sono riportati i metadati relativi al set di dati 2006 - 2008 Crime in the United States (https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes/$metadata).

    
    <?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
    <edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" xmlns:dr="http://schemas.microsoft.com/dallas/2010/04">   
       <edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="1.0">      
          <Schema Namespace="data.gov.Crimes"xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
                  xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
                  xmlns="http://schemas.microsoft.com/ado/2007/05/edm">
             <EntityType Name="CityCrime">
                <Key>
                   <PropertyRef Name="ROWID" />
                </Key>
                <Property Name="ROWID" Type="Edm.Int32" Nullable="false" dr:Queryable="true" dr:Returned="true" />
                <Property Name="State" Type="Edm.String" Nullable="true" dr:Queryable="true" dr:Returned="true" />
                <Property Name="City" Type="Edm.String" Nullable="true" dr:Queryable="true" dr:Returned="true" />
                <Property Name="Year" Type="Edm.Int32" Nullable="false" dr:Queryable="true" dr:Returned="true" />
                <Property Name="Population" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="ViolentCrime" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="MurderAndNonEgligentManslaughter" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="ForcibleRape" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="Robbery" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="AggravatedAssault" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="PropertyCrime" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="Burglary" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="LarcenyTheft" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="MotorVehicleTheft" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="Arson" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
             </EntityType>
             <EntityContainer Name="datagovCrimesContainer" m:IsDefaultEntityContainer="true">
                <EntitySet Name="CityCrime" EntityType="data.gov.Crimes.CityCrime" />
             </EntityContainer>
          </Schema>
       </edmx:DataServices>
    </edmx:Edmx>
    
    

    Esempio di codice 1 – XML dei metadati

    Dallo schema è possibile ottenere numerose informazioni utili.

    • Nome del contenitore di entità.
      <EntityContainer Name="datagovCrimesContainer" m:IsDefaultEntityContainer="true">
      Tipo dell'identificatore context privato utilizzato per autenticare l'accesso al servizio.


    • Nome e tipo del set di entità.
      <EntitySet Name="CityCrime" EntityType="data.gov.Crimes.CityCrime" />
      Tipo degli elementi IEnumerable<T> e IList<T>.


    • Entità e tipo.
      <EntityType Name="CityCrime">
      Tipo utilizzato nella query e nella variabile di ciclo foreach (For Each).


    • Nome di ciascun campo restituito da una query.
      Name=”State”


    • Tipo di dati di ciascun campo.
      Type=”Edm.String”


    • Valore che determina se il campo può avere valore null.
      Nullable=”false”


    • Valore che determina se è possibile utilizzare un campo per filtrare i risultati delle query.
      dr:Queryable=”true”
      dr:Queryable="false"
      Un campo queryable può essere utilizzato in una clausola where (Where) della query. I campi non queryable non possono essere utilizzati nella clausola where (Where) di una query.


    • Valore che determina se questo campo viene restituito quando si esegue la query sul set di dati.
      dr:Returned=”true”

Mostra:
© 2014 Microsoft