Freigeben über


Erstellen einer OData v4-Client-App (C#)

von Mike Wasson

Im vorherigen Lernprogramm haben Sie einen einfachen OData-Dienst erstellt, der CRUD-Vorgänge unterstützt. Jetzt erstellen wir einen Client für den Dienst.

Starten Sie eine neue Instanz von Visual Studio, und erstellen Sie ein neues Konsolenanwendungsprojekt. Wählen Sie im Dialogfeld "Neues Projekt " die Option "Installierte>Vorlagen>Visual C#>Windows Desktop" und dann die Vorlage "Konsolenanwendung" aus. Nennen Sie das Projekt "ProductsApp".

Screenshot des Dialogfelds

Hinweis

Sie können die Konsolen-App auch derselben Visual Studio-Lösung hinzufügen, die den OData-Dienst enthält.

Installieren des OData-Clientcodegenerators

Wählen Sie im Menü "Extras" die Option "Erweiterungen und Updates" aus. Wählen Sie "Online>Visual Studio Gallery" aus. Suchen Sie im Suchfeld nach "OData-Clientcodegenerator". Klicken Sie auf "Herunterladen ", um den VSIX zu installieren. Möglicherweise werden Sie aufgefordert, Visual Studio neu zu starten.

Screenshot des Dialogfelds

Lokales Ausführen des OData-Diensts

Führen Sie das ProductService-Projekt aus Visual Studio aus. Standardmäßig startet Visual Studio einen Browser im Anwendungsstamm. Notieren Sie sich den URI; Sie benötigen dies im nächsten Schritt. Lassen Sie die Anwendung laufen.

Screenshot des lokalen Hosts des Webbrowsers mit dem Code des Product Service-Projekts, das in Visual Studio ausgeführt wird.

Hinweis

Wenn Sie beide Projekte in derselben Projektmappe platzieren, stellen Sie sicher, dass Sie das ProductService-Projekt ohne Debugging ausführen. Im nächsten Schritt müssen Sie den Dienst weiterhin ausführen, während Sie das Konsolenanwendungsprojekt ändern.

Generieren des Dienstproxys

Der Dienstproxy ist eine .NET-Klasse, die Methoden für den Zugriff auf den OData-Dienst definiert. Der Proxy übersetzt Methodenaufrufe in HTTP-Anforderungen. Sie erstellen die Proxyklasse, indem Sie eine T4-Vorlage ausführen.

Klicken Sie mit der rechten Maustaste auf das Projekt. Klicken Sie dann auf Hinzufügen>Neues Element.

Screenshot des Dialogfelds

Wählen Sie im Dialogfeld Neues Element hinzufügen die Option Visual C#-Elemente>Code>OData-Client aus. Nennen Sie die Vorlage "ProductClient.tt". Klicken Sie auf "Hinzufügen" , und klicken Sie auf die Sicherheitswarnung.

Screenshot des Fensters der neuen Produkteinstellungen-App, in dem die OData-Client-Produktvorlage angezeigt wird und das Namensfeld unten markiert ist, um einen neuen Namen hinzuzufügen.

An diesem Punkt erhalten Sie einen Fehler, den Sie ignorieren können. Visual Studio führt die Vorlage automatisch aus, aber die Vorlage benötigt zuerst einige Konfigurationseinstellungen.

Screenshot des Fensters mit Fehlermeldung, das eine Fehlerregisterkarte und eine Warnregisterkarte sowie eine detaillierte Meldung des Fehlers zeigt.

Öffnen Sie die Datei ProductClient.odata.config. Fügen Sie im Parameter Element den URI aus dem ProductService-Projekt (vorheriger Schritt) ein. Beispiel:

<Parameter Name="MetadataDocumentUri" Value="http://localhost:61635/" />

Screenshot der Konfigurationsdatei des Produktclients O Data dot config mit einem Beispiel für die U R I nach dem Einfügen in das Parameterelement.

Führen Sie die Vorlage erneut aus. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die ProductClient.tt Datei, und wählen Sie " Benutzerdefiniertes Tool ausführen" aus.

Die Vorlage erstellt eine Codedatei mit dem Namen ProductClient.cs, die den Proxy definiert. Wenn Sie den OData-Endpunkt ändern, führen Sie die Vorlage beim Entwickeln Der App erneut aus, um den Proxy zu aktualisieren.

Screenshot des Menüs des Projektmappen-Explorers, in dem die Produktclient.cs-Datei hervorgehoben wird, die erstellt wurde und den Proxy definiert.

Verwenden des Dienstproxys zum Aufrufen des OData-Diensts

Öffnen Sie die Datei Program.cs, und ersetzen Sie den Code des Textbausteins durch Folgendes.

using System;

namespace ProductsApp
{
    class Program
    {
        // Get an entire entity set.
        static void ListAllProducts(Default.Container container)
        {
            foreach (var p in container.Products)
            {
                Console.WriteLine("{0} {1} {2}", p.Name, p.Price, p.Category);
            }
        }

        static void AddProduct(Default.Container container, ProductService.Models.Product product)
        {
            container.AddToProducts(product);
            var serviceResponse = container.SaveChanges();
            foreach (var operationResponse in serviceResponse)
            {
                Console.WriteLine("Response: {0}", operationResponse.StatusCode);
            }
        }

        static void Main(string[] args)
        {
            // TODO: Replace with your local URI.
            string serviceUri = "http://localhost:port/";
            var container = new Default.Container(new Uri(serviceUri));

            var product = new ProductService.Models.Product()
            {
                Name = "Yo-yo",
                Category = "Toys",
                Price = 4.95M
            };

            AddProduct(container, product);
            ListAllProducts(container);
        }
    }
}

Ersetzen Sie den Wert von serviceUri durch den Dienst-URI aus früheren Versionen.

// TODO: Replace with your local URI.
string serviceUri = "http://localhost:port/";

Wenn Sie die App ausführen, sollte folgendes ausgegeben werden:

Response: 201
Yo-yo 4.95 Toys