OData v4 클라이언트 앱 만들기(C#)Create an OData v4 Client App (C#)

Mike Wassonby Mike Wasson

이전 자습서에서는 CRUD 작업을 지 원하는 기본 OData 서비스를 만들었습니다.In the previous tutorial, you created a basic OData service that supports CRUD operations. 이제 서비스에 대 한 클라이언트를 만들어 보겠습니다.Now let's create a client for the service.

Visual Studio의 새 인스턴스를 시작 하 고 새 콘솔 응용 프로그램 프로젝트를 만듭니다.Start a new instance of Visual Studio and create a new console application project. 새 프로젝트 대화 상자에서 설치 > 템플릿 > C# Visual > Windows Desktop을 선택 하 고 콘솔 응용 프로그램 템플릿을 선택 합니다.In the New Project dialog, select Installed > Templates > Visual C# > Windows Desktop, and select the Console Application template. 프로젝트 이름을 ProductsApp"로 "합니다.Name the project "ProductsApp".

Note

또한 OData 서비스를 포함 하는 동일한 Visual Studio 솔루션에 콘솔 앱을 추가할 수 있습니다.You can also add the console app to the same Visual Studio solution that contains the OData service.

OData 클라이언트 코드 생성기 설치Install the OData Client Code Generator

도구 메뉴에서 확장 및 업데이트를 선택합니다.From the Tools menu, select Extensions and Updates. 온라인 > Visual Studio 갤러리를 선택 합니다.Select Online > Visual Studio Gallery. 검색 상자에서 "OData 클라이언트 코드 생성기"를 검색 합니다.In the search box, search for "OData Client Code Generator". 다운로드 를 클릭 하 여 VSIX를 설치 합니다.Click Download to install the VSIX. Visual Studio를 다시 시작 하 라는 메시지가 표시 될 수 있습니다.You might be prompted to restart Visual Studio.

OData 서비스를 로컬로 실행Run the OData Service Locally

Visual Studio에서 제품 서비스 프로젝트를 실행 합니다.Run the ProductService project from Visual Studio. 기본적으로 Visual Studio는 응용 프로그램 루트에 대 한 브라우저를 시작 합니다.By default, Visual Studio launches a browser to the application root. URI를 적어둡니다. 이는 다음 단계에서 필요 합니다.Note the URI; you will need this in the next step. 애플리케이션을 실행 상태로 둡니다.Leave the application running.

Note

동일한 솔루션에 두 프로젝트를 모두 배치 하는 경우에는 디버깅 하지 않고 제품 서비스 프로젝트를 실행 해야 합니다.If you put both projects in the same solution, make sure to run the ProductService project without debugging. 다음 단계에서는 콘솔 응용 프로그램 프로젝트를 수정 하는 동안 서비스를 실행 상태로 유지 해야 합니다.In the next step, you will need to keep the service running while you modify the console application project.

서비스 프록시를 생성 합니다.Generate the Service Proxy

서비스 프록시는 OData 서비스에 액세스 하기 위한 메서드를 정의 하는 .NET 클래스입니다.The service proxy is a .NET class that defines methods for accessing the OData service. 프록시는 메서드 호출을 HTTP 요청으로 변환 합니다.The proxy translates method calls into HTTP requests. T4 템플릿을실행 하 여 프록시 클래스를 만듭니다.You will create the proxy class by running a T4 template.

프로젝트를 마우스 오른쪽 단추로 클릭합니다.Right-click the project. 추가 > 새 항목을 선택합니다.Select Add > New Item.

새 항목 추가 대화 상자에서 C# Visual Items > 코드 > OData 클라이언트를 선택 합니다.In the Add New Item dialog, select Visual C# Items > Code > OData Client. 템플릿 이름을 ProductClient.tt"로 "합니다.Name the template "ProductClient.tt". 추가 를 클릭 하 고 보안 경고를 클릭 합니다.Click Add and click through the security warning.

이 시점에서 무시 해도 오류가 발생 합니다.At this point, you'll get an error, which you can ignore. Visual Studio에서 자동으로 템플릿을 실행 하지만 템플릿에는 먼저 일부 구성 설정이 필요 합니다.Visual Studio automatically runs the template, but the template needs some configuration settings first.

제품 클라이언트. odata .config 파일을 엽니다. Parameter 요소에서 제품 서비스 프로젝트 (이전 단계)의 URI에 붙여넣습니다.Open the file ProductClient.odata.config. In the Parameter element, paste in the URI from the ProductService project (previous step). 다음은 그 예입니다.For example:

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

템플릿을 다시 실행 합니다.Run the template again. 솔루션 탐색기에서 ProductClient.tt 파일을 마우스 오른쪽 단추로 클릭 하 고 사용자 지정 도구 실행을 선택 합니다.In Solution Explorer, right click the ProductClient.tt file and select Run Custom Tool.

템플릿은 프록시를 정의 하는 ProductClient.cs 라는 코드 파일을 만듭니다.The template creates a code file named ProductClient.cs that defines the proxy. 앱을 개발할 때 OData 끝점을 변경 하는 경우 템플릿을 다시 실행 하 여 프록시를 업데이트 합니다.As you develop your app, if you change the OData endpoint, run the template again to update the proxy.

서비스 프록시를 사용 하 여 OData 서비스 호출Use the Service Proxy to Call the OData Service

Program.cs 파일을 열고 상용구 코드를 다음으로 바꿉니다.Open the file Program.cs and replace the boilerplate code with the following.

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로 바꿉니다.Replace the value of serviceUri with the service URI from earlier.

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

앱을 실행 하면 다음이 출력 됩니다.When you run the app, it should output the following:

Response: 201
Yo-yo 4.95 Toys