Создание клиентского приложения OData версии 4 (C#)

Майк Уосон

В предыдущем руководстве вы создали базовую службу OData, которая поддерживает операции CRUD. Теперь создадим клиент для службы.

Запустите новый экземпляр Visual Studio и создайте проект консольного приложения. В диалоговом окне "Создать проект " выберите "Установленные>шаблоны>" Visual C#>Windows Desktop и выберите шаблон консольного приложения . Назовите проект ProductsApp.

Снимок экрана: диалоговое окно нового проекта с выделением пути с помощью параметров меню, чтобы создать проект консольного приложения.

Замечание

Консольное приложение также можно добавить в то же решение Visual Studio, которое содержит службу OData.

Установка генератора кода клиента OData

В меню "Сервис" выберите "Расширения" и "Обновления". Выберите Online>галерею Visual Studio. В поле поиска найдите "Генератор кода клиента OData". Нажмите кнопку "Скачать ", чтобы установить VSIX. Возможно, вам будет предложено перезапустить Visual Studio.

Снимок экрана: диалоговое окно расширений и обновлений, в котором отображается меню для скачивания и установки генератора кода клиента V I X для O Data.

Локальное выполнение службы OData

Запустите проект ProductService из Visual Studio. По умолчанию Visual Studio запускает браузер в корневой каталог приложения. Обратите внимание на универсальный код ресурса (URI); Это потребуется на следующем шаге. Оставьте приложение запущенным.

Снимок экрана локального хоста веб-браузера, показывающий код проекта Product Service, который работает в Visual Studio.

Замечание

Если вы помещаете оба проекта в одно решение, обязательно запустите проект ProductService без отладки. На следующем шаге необходимо сохранить работу службы во время изменения проекта консольного приложения.

Генерировать прокси-сервер службы

Прокси-сервер службы — это класс .NET, определяющий методы для доступа к службе OData. Прокси-сервер преобразует вызовы метода в HTTP-запросы. Вы создадите прокси-класс, выполнив шаблон T4.

Щелкните проект правой кнопкой мыши. Щелкните Добавить>Новый элемент.

Снимок экрана: диалоговое окно обозревателя решений, показывающее путь к файлу для добавления нового элемента в проект, выделите параметры желтым цветом.

В диалоговом окне Добавление нового элемента выберите Visual C# элементы>Код>Клиент OData. Назовите шаблон "ProductClient.tt". Нажмите кнопку «Добавить» и продолжайте через предупреждение безопасности.

Снимок экрана окна настроек приложения новых элементов продукта, показывающий шаблон продукта клиента O Data и обведенное вокруг поле имени ниже, чтобы добавить новое имя.

На этом этапе вы получите ошибку, которую можно игнорировать. Visual Studio автоматически запускает шаблон, но шаблону сначала нужны некоторые параметры конфигурации.

Снимок экрана: окно сообщения об ошибке с одной вкладкой ошибок и одной вкладкой предупреждений, а также подробным сообщением об ошибке.

Откройте файл ProductClient.odata.config. В элементе Parameter вставьте URI из проекта ProductService (предыдущий шаг). Рассмотрим пример.

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

Скриншот файла конфигурации клиента продукта OData.config, показывающий пример URI после вставки в элемент параметра.

Снова запустите шаблон. В обозревателе решений щелкните правой кнопкой мыши файл ProductClient.tt и выберите "Запустить настраиваемое средство".

Шаблон создает файл кода с именем ProductClient.cs, определяющий прокси-сервер. При разработке приложения при изменении конечной точки OData запустите шаблон еще раз, чтобы обновить прокси-сервер.

Снимок экрана окна меню обозревателя решений, в котором выделен созданный файл продукта клиента .cs, который определяет прокси.

Использование прокси-сервиса для вызова службы OData

Откройте файл Program.cs и замените стандартный код следующим образом.

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

Замените значение serviceUri на URI службы, указанный ранее.

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

При запуске приложения он должен вывести следующее:

Response: 201
Yo-yo 4.95 Toys