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

von Mike Wasson

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

Starten Sie eine neue instance von Visual Studio, und erstellen Sie ein neues Konsolenanwendungsprojekt. Wählen Sie im Dialogfeld Neues Projektdie 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-Projektmappe 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 Visual Studio-Katalog online> aus. Suchen Sie im Suchfeld nach "OData Client Code Generator". Klicken Sie auf Herunterladen , um 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 in 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. Unterbrechen Sie die Ausführung der Anwendung nicht.

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 Debuggen 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#-Elementcode>>OData-Client aus. Geben Sie der Vorlage den Namen "ProductClient.tt". Klicken Sie auf Hinzufügen , und klicken Sie sich durch die Sicherheitswarnung.

Screenshot des Fensters

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 Fehlermeldungsfensters mit einer Fehlerregisterkarte und einer Warnungsregisterkarte sowie einer detaillierten Fehlermeldung des Fehlers.

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

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

Screenshot der Konfigurationsdatei für den Produktclient mit einem Datenpunkt 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 in 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 namens ProductClient.cs, die den Proxy definiert. Wenn Sie während der Entwicklung Ihrer App den OData-Endpunkt ändern, führen Sie die Vorlage erneut aus, um den Proxy zu aktualisieren.

Screenshot des Fenstermenüs des Projektmappen-Explorers, in dem die erstellte Produktclient-Datei hervorgehoben ist, die den Proxy definiert.

Verwenden des Dienstproxys zum Aufrufen des OData-Diensts

Öffnen Sie die Datei Program.cs, und ersetzen Sie den Code des Bausteines 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 von früher.

// 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