(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Erstellen einer flexiblen Abfrageanwendung

Letzte Aktualisierung: Februar 2014

 

DataMarket-Logo

Verwenden Sie Dienstverweise in Visual Studio, um programmgesteuert Marketplace-Datasets zu verarbeiten, die der Datenherausgeber als flexible Abfragedatasets angegeben hat.

ImportantWichtig
Der Code in einem Dienstverweis sollte nicht geändert werden, weil Änderungen zu einer nicht ordnungsgemäßen Funktionalität und Nebeneffekten führen können. Außerdem werden Änderungen bei jeder Aktualisierung des Dienstverweises überschrieben.

Bevor Sie fortfahren, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind:

  • Ein gültiges Windows Live ID-Konto. Wenn Sie nicht über eine Live ID verfügen, besuchen Sie die Windows Live-Startseite, und registrieren Sie sich.

  • Ein gültiges Marketplace-Konto. Wenn Sie nicht über ein Marketplace-Konto verfügen, befolgen Sie die Anweisungen im Thema Erstellen eines Marketplace-Kontos.

  • Ein Abonnement des flexiblen Marketplace-Abfragedatasets, das Sie in Ihrer Anwendung verwenden möchten. Wenn Sie kein flexibles Abfragedataset abonniert haben, lesen Sie Abonnieren eines Datenangebots, und befolgen Sie die dort beschriebenen Anweisungen.

 

Abschnitt Beschreibung

Schritt 1: Erstellen des Projekts in Visual Studio

In Visual Studio zum Starten eines neuen Konsolenprojekts für Marketplace auszuführende Schritte.

Schritt 2: Hinzufügen des Dienstverweises für den Datendienst

Schritte zum Hinzufügen eines Dienstverweises für die Nutzung von Marketplace-Daten.

Schritt 3: Nutzen von Daten mit verwaltetem Code

Code, den Sie zum Nutzen eines flexiblen Marketplace-Abfragedatasets schreiben.

Fertiggestellter Code

Die vollständige Konsolenanwendung in C# und VB.

Metadaten

XML-Beispielmetadaten für dieses flexible Abfragedataset.

Ausführen von Visual Studio 2010 als Administrator

  1. Suchen Sie Visual Studio im Startmenü.

  2. Klicken Sie mit der rechten Maustaste auf Visual Studio.

  3. Klicken Sie im Dropdownmenü auf Als Administrator ausführen.

  4. Wenn Sie gefragt werden, ob dieses Programm (devenv.exe) Änderungen am Computer vornehmen darf, klicken Sie auf Ja.

Erstellen eines neuen Projekts

  1. Wählen Sie auf der Startseite von Visual Studio die Option Neues Projekt aus.

  2. Wählen Sie Visual C# und Konsolenanwendung (Visual Basic und Konsolenanwendung, wenn Sie Visual Basic bevorzugen) im Dialogfeld Neues Projekt aus.

  3. Wählen Sie aus der Dropdownliste oben im Dialogfeld Neues Projekt die Option .NET Framework 4 aus.

    Die Standardeinstellung von Visual Studio 2010 lautet .NET Framework 4. Wenn Sie eine frühere Version von Visual Studio verwenden und .NET Framework 4 nicht installiert ist, besuchen Sie die .NET Framework 4-Downloadseite, um die Anwendung herunterzuladen und zu installieren.

  4. Geben Sie Ihrem Projekt einen sinnvollen Namen. Dieses Projekt können Sie z. B. USCrime2006and2007 nennen.

  5. Klicken Sie auf OK.

  6. Fügen Sie oben in Program.cs (Program.vb) den folgenden Code hinzu, der für die Authentifizierung Ihres Zugriffs auf das Dataset benötigt wird.

    using System.Net; // needed for authentication
    

Nachdem Sie Visual Studio als Administrator gestartet und eine neue Konsolenanwendung erstellt haben (Schritt 1), fügen Sie den Dienstverweis für den Datendienst hinzu, den Sie nutzen möchten.

Abrufen der Stamm-URL des Diensts

  1. Navigieren Sie zur Marketplace-Startseite.

  2. Klicken Sie auf die Registerkarte Meine Daten.

  3. Suchen Sie nach dem Datendienst 2006 - 2008 Crime in the United States.

  4. Klicken Sie rechts neben dem Namen des Datasets auf Verwenden. Auf diese Weise gelangen Sie auf die Detailseite für dieses Dataset.

  5. Führen Sie einen Bildlauf nach unten bis zu den Registerkarten unter Informationen zum Verwenden dieser Daten in Visual Studio aus.

  6. Klicken Sie auf die Registerkarte Details.

  7. Suchen Sie die Stamm-URL des Diensts.

    Dienststamm-URL


    Abbildung 1 - Stamm-URL des Diensts

  8. Kopieren Sie die Stamm-URL des Diensts in die Zwischenablage.

Hinzufügen des Dienstverweises zum Projekt

  1. Kehren Sie zu Ihrem Visual Studio-Projekt zurück.

  2. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf Verweise.

  3. Wählen Sie Dienstverweis hinzufügen aus dem Dropdownmenü aus.

  4. Fügen Sie die Stamm-URL aus der Zwischenablage in die Dropdownliste Adresse ein.

  5. Klicken Sie auf Start.
    Warten Sie einige Zeit, bis das Textfeld Dienste den Dienst anzeigt, der für Ihr Projekt verfügbar ist.

  6. Geben Sie einen sinnvollen Namen für den Namespace in das Textfeld Namespace ein.
    Beispiel: DataGovCrimes.

  7. Klicken Sie auf OK.
    Der Name Ihres Dienstverweises wird unter Dienstverweise im Projektmappen-Explorer angezeigt.

Hinzufügen des Dienstverweises zum Code

  1. Wählen Sie Program.cs (Program.vb) im Codebereich von Visual Studio aus.

  2. Fügen Sie die folgende Anweisung hinzu, durch die Ihre Anwendung auf den Dienstverweis zugreifen kann.

    noteHinweis
    Verwenden Sie den Programmnamespace sowie den Namen des Dienstverweis-Namespaces, den Sie oben in Schritt 6 erstellt haben.

    using USCrime2006and2007.DataGovCrimes; // using ApplicationName.ServiceReferenceName
    

Erstellen einer Klasse für diese Funktionalität

  1. Erstellen Sie eine öffentliche Klasse (CrimeData) in Ihrem Projektnamespace.

  2. Erstellen Sie zwei private Variablen in dieser Klasse.

    • Ein URI für den Dienst.

    • Ein Dienstcontainer, der die Anmeldeinformationen Ihres Diensts im Dienstkontext speichert.

      Ermitteln des Entitätstyps

      1. Navigieren Sie zur Detailseite.

      2. Klicken Sie auf Erste Schritte mit diesem Dataset.

      3. Klicken Sie auf die Registerkarte Übersicht.
        Der Name der Entitätsmenge und der Entitätsauflistung werden angezeigt.

    
    class CrimeData
    {
        private Uri serviceURI;
        private datagovCrimesContainer context;
    }  // end class CrimeData
    
    
  3. Erstellen Sie einen Konstruktor für die Klasse CrimeData.
    Der Konstruktor initialisiert private Variablen und die Anmeldeinformationen des Benutzers.
    Die Angabe SERVICE_ROOT_URL ist der HTTPS-Link, den Sie weiter oben in die Zwischenablage kopiert haben. (Siehe Abrufen der Stamm-URL des Diensts.)
    Die Angabe context ist der Dienstcontainer, der für die Anmeldeinformationen des Benutzers verwendet wird.
    Die Eigenschaft IgnoreMissingProperties wird auf true festgelegt, um den Client für Eigenschaften zu stabilisieren, die dem Typ auf dem Server hinzugefügt werden. (Weitere Informationen finden Sie in der MSDN-Dokumentation.)
    Die USER_ID ist Ihre Live ID.
    Der SECURE_ACCOUNT_KEY ist der Marketplace-Kontoschlüssel, den Sie für diese Anwendung verwenden. (Siehe Verwalten Ihres Marketplace-Kontos.)

    
    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. Erstellen Sie eine öffentliche Methode in Ihrer Klasse, die eine generische Liste zurückgibt. Für Ihr Programm lautet der generische Listentyp CityCrime.
    Diese Methode fragt den Dienst ab und gibt bei Erfolg das Resultset als Liste zurück. Wenn aus bestimmten Gründen ein Abfragefehler auftritt, gibt die Methode null (Nothing) zurück.

    
    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
    
    

    Bei der Abfrage kann es sich um eine beliebige gültige Marketplace-LINQ-Abfrage handeln, die optional den Filter where (Where) und/oder orderby (Order By) enthalten kann.
    Weitere Informationen zu LINQ-Abfragen finden Sie unter LINQ-Abfrageausdrücke (C#-Programmierhandbuch) (LINQ in Visual Basic).
    Informationen zu den Einschränkungen von LINQ-Abfragen in Marketplace finden Sie unter Unterstützte OData-Abfrageoptionen.

    Die folgenden LINQ-Abfragen sind in Marketplace gültig.

    
    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. Schreiben Sie den Code in Main(), der Ihre Klasse CrimeData und die Methode GetCrimeData() zum Nutzen und Anzeigen der Daten verwendet.

    
    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

Die Metadaten des Datasets informieren IntelliSense, wenn Sie Ihren Code schreiben. Wenn Ihre IDE IntelliSense nicht unterstützt oder IntelliSense nicht funktioniert, können Sie die Metadaten vom Dienst abrufen.

  1. Abrufen der Stamm-URL des Diensts für das Dataset
    Anweisungen zum Abrufen der Stamm-URL des Diensts finden Sie weiter oben im Abschnitt Abrufen der Stamm-URL des Diensts.

  2. Fügen Sie /$metadata am Ende der Stamm-URL des Diensts hinzu.
    Wenn Ihre Stamm-URL des Diensts z. B. https://api.datamarket.azure.com/Data.ashx/fabrikam.com/inventory lautet, lautet die Metadaten-URL https://api. datamarket.azure.com/Data.ashx/fabrikam.com/inventory/$metadata.

  3. Navigieren Sie im Browser zur Metadaten-URL.

  4. Analysieren Sie die Metadaten.
    Die folgenden Metadaten gelten für das Dataset 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>
    
    

    Codebeispiel 1 – Metadaten-XML

    Sie können viele nützliche Informationen aus dem Schema abrufen.

    • Den Namen des Entitätscontainers.
      <EntityContainer Name="datagovCrimesContainer" m:IsDefaultEntityContainer="true">
      Dies ist der Typ des privaten context-Bezeichners, der für die Authentifizierung des Zugriffs auf den Dienst verwendet wird.


    • Name und Typ der Entitätsmenge.
      <EntitySet Name="CityCrime" EntityType="data.gov.Crimes.CityCrime" />
      Dies ist der Typ von IEnumerable<T> und IList<T>.


    • Die Entität und den Typ.
      <EntityType Name="CityCrime">
      Dies ist der Typ, der in Ihrer Abfrage und in der Schleifenvariable foreach (For Each) verwendet wird.


    • Den Namen jedes Felds, das von einer Abfrage zurückgegeben wird.
      Name=”State”


    • Den Datentyp jedes Felds.
      Type=”Edm.String”


    • Die Zulässigkeit von Nullwerten für das Feld.
      Nullable=”false”


    • Die Zulässigkeit eines Felds als Filter für Abfrageergebnisse.
      dr:Queryable=”true”
      dr:Queryable="false"
      Ein abfragbares Feld kann in einer Klausel where (Where) in Ihrer Abfrage verwendet werden. Nicht abfragbare Felder dürfen in einer Klausel where (Where) in einer Abfrage nicht verwendet werden.


    • Die Rückgabe dieses Felds bei einer Abfrage des Datasets.
      dr:Returned=”true”

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.