Creare un'app client OData v4 (C#)

di Mike Wasson

Nell'esercitazione precedente è stato creato un servizio OData di base che supporta le operazioni CRUD. Verrà ora creato un client per il servizio.

Avviare una nuova istanza di Visual Studio e creare un nuovo progetto di applicazione console. Nella finestra di dialogo Nuovo progetto selezionareModelli>installati>Visual C#>Windows Desktop e selezionare il modello di applicazione console. Assegnare un nome al progetto "ProductsApp".

Screenshot della finestra di dialogo nuovo progetto, evidenziando il percorso tramite le opzioni di menu, per creare un nuovo progetto di applicazione console.

Nota

È anche possibile aggiungere l'app console alla stessa soluzione di Visual Studio che contiene il servizio OData.

Installare il generatore di codice client OData

Scegliere Estensioni e aggiornamenti dal menu Strumenti. Selezionare Online>Visual Studio Gallery. Nella casella di ricerca cercare "Generatore di codice client OData". Fare clic su Scarica per installare VSIX. Potrebbe essere richiesto di riavviare Visual Studio.

Screenshot della finestra di dialogo estensioni e aggiornamenti, che mostra il menu per il download e l'installazione del generatore di codice client V S I X per I dati O.

Eseguire il servizio OData in locale

Eseguire il progetto ProductService da Visual Studio. Per impostazione predefinita, Visual Studio avvia un browser nella radice dell'applicazione. Prendere nota dell'URI; sarà necessario questo nel passaggio successivo. Lasciare l'applicazione in esecuzione.

Screenshot dell'host locale del Web browser, che mostra il codice del progetto Product Service in esecuzione in Visual Studio.

Nota

Se si inseriscono entrambi i progetti nella stessa soluzione, assicurarsi di eseguire il progetto ProductService senza eseguire il debug. Nel passaggio successivo sarà necessario mantenere il servizio in esecuzione durante la modifica del progetto dell'applicazione console.

Generare il proxy del servizio

Il proxy del servizio è una classe .NET che definisce i metodi per l'accesso al servizio OData. Il proxy converte le chiamate al metodo in richieste HTTP. Verrà creata la classe proxy eseguendo un modello T4.

Fare clic con il pulsante destro del mouse sul progetto. Scegliere Aggiungi>Nuovo elemento.

Screenshot della finestra di dialogo Esplora soluzioni, che mostra il percorso del file per l'aggiunta di un nuovo elemento al progetto, evidenziando le opzioni in giallo.

Nella finestra di dialogo Aggiungi nuovo elemento selezionare Visual C# Items>Code>OData Client. Assegnare al modello il nome "ProductClient.tt". Fare clic su Aggiungi e fare clic sull'avviso di sicurezza.

Screenshot della finestra delle impostazioni dell'app per i nuovi elementi, che mostra il modello di prodotto client O Data e circlinga il campo nome seguente per aggiungere nuovo nome.

A questo punto si riceverà un errore, che è possibile ignorare. Visual Studio esegue automaticamente il modello, ma il modello richiede prima alcune impostazioni di configurazione.

Screenshot della finestra del messaggio di errore, che mostra una scheda di errore e una scheda di avviso, insieme a un messaggio dettagliato dell'errore.

Aprire il file ProductClient.odata.config. Nell'elemento incollare l'URI Parameter dal progetto ProductService (passaggio precedente). Ad esempio:

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

Screenshot del file di configurazione del client O Data del prodotto che mostra un esempio di U R I dopo essere incollato nell'elemento del parametro.

Eseguire di nuovo il modello. In Esplora soluzioni fare clic con il pulsante destro del mouse sul file ProductClient.tt e scegliere Esegui strumento personalizzato.

Il modello crea un file di codice denominato ProductClient.cs che definisce il proxy. Quando si sviluppa l'app, se si modifica l'endpoint OData, eseguire di nuovo il modello per aggiornare il proxy.

Screenshot del menu della finestra esplora soluzioni, evidenziando il file del client del prodotto c creato, che definisce il proxy.

Usare il proxy del servizio per chiamare il servizio OData

Aprire il file Program.cs e sostituire il codice boilerplate con il codice seguente.

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);
        }
    }
}

Sostituire il valore di serviceUri con l'URI del servizio precedente.

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

Quando si esegue l'app, dovrebbe restituire quanto segue:

Response: 201
Yo-yo 4.95 Toys