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".
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.
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.
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.
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.
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.
Ö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/" />
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.
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