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

Майк Уосон

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

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

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

Примечание

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

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

Откройте меню Средства и выберите пункт Расширения и обновления. Выберите OnlineVisual Studio Gallery (Online> Visual Studio Gallery). В поле поиска найдите "OData Client Code Generator". Нажмите кнопку Скачать , чтобы установить VSIX. Может появиться запрос на перезапуск Visual Studio.

Снимок экрана: диалоговое окно

Локальный запуск службы OData

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

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

Примечание

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

Создание прокси-сервера службы

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

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

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

В диалоговом окне Добавление нового элемента выберите Visual C# Items>Code>OData Client. Присвойте шаблону имя "ProductClient.tt". Нажмите кнопку Добавить и щелкните предупреждение системы безопасности.

Снимок экрана: окно параметров приложения для новых элементов продукта с шаблоном клиента O Data и кружение поля имени ниже для добавления нового имени.

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

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

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

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

Снимок экрана: файл конфигурации точки O Data клиента продукта с примером пользовательского идентификатора после вставки в элемент параметра.

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

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

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

Использование прокси-сервера службы для вызова службы 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