OData v4 클라이언트 앱 만들기(C#)
작성자: Mike Wasson
이전 자습서에서는 CRUD 작업을 지원하는 기본 OData 서비스를 만들었습니다. 이제 서비스에 대한 클라이언트를 만들어 보겠습니다.
Visual Studio의 새 instance 시작하고 새 콘솔 애플리케이션 프로젝트를 만듭니다. 새 프로젝트 대화 상자에서 설치된>템플릿>Visual C#>Windows Desktop을 선택하고 콘솔 애플리케이션 템플릿을 선택합니다. 프로젝트의 이름을 "ProductsApp"으로 지정합니다.
참고
OData 서비스를 포함하는 동일한 Visual Studio 솔루션에 콘솔 앱을 추가할 수도 있습니다.
OData 클라이언트 코드 생성기 설치
도구 메뉴에서 확장 및 업데이트를 선택합니다. 온라인>Visual Studio 갤러리를 선택합니다. 검색 상자에서 "OData 클라이언트 코드 생성기"를 검색합니다. 다운로드를 클릭하여 VSIX를 설치합니다. Visual Studio를 다시 시작하라는 메시지가 표시될 수 있습니다.
OData 서비스를 로컬로 실행
Visual Studio에서 ProductService 프로젝트를 실행합니다. 기본적으로 Visual Studio는 브라우저를 애플리케이션 루트로 시작합니다. URI를 확인합니다. 다음 단계에서 이 항목이 필요합니다. 애플리케이션을 실행 상태로 둡니다.
참고
두 프로젝트를 동일한 솔루션에 배치하는 경우 디버깅하지 않고 ProductService 프로젝트를 실행해야 합니다. 다음 단계에서는 콘솔 애플리케이션 프로젝트를 수정하는 동안 서비스를 계속 실행해야 합니다.
서비스 프록시 생성
서비스 프록시는 OData 서비스에 액세스하기 위한 메서드를 정의하는 .NET 클래스입니다. 프록시는 메서드 호출을 HTTP 요청으로 변환합니다. T4 템플릿을 실행하여 프록시 클래스를 만듭니다.
프로젝트를 마우스 오른쪽 단추로 클릭합니다. 추가>새 항목을 선택합니다.
새 항목 추가 대화 상자에서 Visual C# 항목>코드>OData 클라이언트를 선택합니다. 템플릿 이름을 "ProductClient.tt"로 지정합니다. 추가를 클릭하고 보안 경고를 클릭합니다.
이 시점에서 무시할 수 있는 오류가 발생합니다. Visual Studio는 템플릿을 자동으로 실행하지만 템플릿에는 먼저 일부 구성 설정이 필요합니다.
파일 ProductClient.odata.config 엽니다. 요소에 Parameter
ProductService 프로젝트(이전 단계)의 URI를 붙여넣습니다. 예:
<Parameter Name="MetadataDocumentUri" Value="http://localhost:61635/" />
템플릿을 다시 실행합니다. 솔루션 탐색기 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