Criar um aplicativo cliente do OData v4 (C#)

por Mike Wasson

No tutorial anterior, você criou um serviço OData básico que dá suporte a operações CRUD. Agora vamos criar um cliente para o serviço.

Inicie uma nova instância do Visual Studio e crie um novo projeto de aplicativo de console. Na caixa de diálogo Novo Projeto, selecioneModelos Instalados>>Visual C#>Área de Trabalho do Windows e selecione o modelo Aplicativo de Console. Nomeie o projeto como "ProductsApp".

Captura de tela da caixa de diálogo novo projeto, realçando o caminho por meio das opções de menu, para criar um novo projeto de aplicativo de console.

Observação

Você também pode adicionar o aplicativo de console à mesma solução do Visual Studio que contém o serviço OData.

Instalar o gerador de código do cliente OData

No menu Ferramentas, selecione Extensões e atualizações. SelecioneGaleria do Visual StudioOnline>. Na caixa de pesquisa, pesquise "Gerador de Código do Cliente OData". Clique em Baixar para instalar o VSIX. Talvez seja solicitado que você reinicie o Visual Studio.

Captura de tela da caixa de diálogo extensões e atualizações, mostrando o menu para baixar e instalar o gerador de código do cliente VS I X para dados O.

Executar o serviço OData localmente

Execute o projeto ProductService no Visual Studio. Por padrão, o Visual Studio inicia um navegador para a raiz do aplicativo. Observe o URI; você precisará disso na próxima etapa. Deixe o aplicativo em execução.

Captura de tela do host local do navegador da Web, mostrando o código do projeto do Serviço de Produto em execução no Visual Studio.

Observação

Se você colocar os dois projetos na mesma solução, execute o projeto ProductService sem depuração. Na próxima etapa, você precisará manter o serviço em execução enquanto modifica o projeto do aplicativo de console.

Gerar o Proxy de Serviço

O proxy de serviço é uma classe .NET que define métodos para acessar o serviço OData. O proxy converte chamadas de método em solicitações HTTP. Você criará a classe proxy executando um modelo T4.

Clique com o botão direito do mouse no projeto. Selecione Adicionar>Novo Item.

Captura de tela da caixa de diálogo gerenciador de soluções, mostrando o caminho do arquivo para adicionar um novo item ao projeto, realçando as opções em amarelo.

Na caixa de diálogo Adicionar Novo Item , selecione Visual C# Items>Code>OData Client. Nomeie o modelo como "ProductClient.tt". Clique em Adicionar e clique no aviso de segurança.

Captura de tela da janela de configurações do aplicativo de produto de novos itens, mostrando o modelo de produto do cliente O Data e circulando o campo de nome abaixo para adicionar um novo nome.

Neste ponto, você receberá um erro, que pode ser ignorado. O Visual Studio executa automaticamente o modelo, mas o modelo precisa primeiro de algumas configurações.

Captura de tela da janela de mensagem de erro, mostrando uma guia de erro e uma guia de aviso, juntamente com uma mensagem detalhada do erro.

Abra o arquivo ProductClient.odata.config. Parameter No elemento , cole o URI do projeto ProductService (etapa anterior). Por exemplo:

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

Captura de tela do arquivo de configuração de ponto O Data do cliente do produto, mostrando um exemplo da U R I depois de ser colado no elemento de parâmetro.

Execute o modelo novamente. Em Gerenciador de Soluções, clique com o botão direito do mouse no arquivo ProductClient.tt e selecione Executar Ferramenta Personalizada.

O modelo cria um arquivo de código chamado ProductClient.cs que define o proxy. Ao desenvolver seu aplicativo, se você alterar o ponto de extremidade OData, execute o modelo novamente para atualizar o proxy.

Captura de tela do menu da janela do gerenciador de soluções, realçando o arquivo dot c s do cliente do produto que foi criado, que define o proxy.

Usar o Proxy de Serviço para chamar o serviço OData

Abra o arquivo Program.cs e substitua o código clichê pelo seguinte.

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

Substitua o valor de serviceUri pelo URI de serviço anterior.

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

Quando você executa o aplicativo, ele deve gerar o seguinte:

Response: 201
Yo-yo 4.95 Toys