WCF 웹 프로그래밍 모델 개요

웹 프로그래밍 모델에서는 웹 스타일 서비스를 빌드하는 데 필요한 기본 프레임워크 요소를 WCF(Windows Communication Foundation)에 제공합니다. 웹 스타일 서비스는 클라이언트 프레임워크가 추가되지 않은 웹 브라우저를 비롯한 광범위한 클라이언트에서 액세스할 수 있게 디자인된 것으로, 다음과 같은 고유한 요구 사항이 있습니다.

  • URI 및 URI 처리. URI는 웹 스타일 서비스 디자인에서 중요한 역할을 합니다. WCF 웹 프로그래밍 모델은 UriTemplateUriTemplateTable 클래스를 사용하여 URI 처리 기능을 제공합니다.
  • GET 및 POST 작업 지원. 웹 스타일 서비스는 데이터 수정 및 원격 호출에 다양한 호출 동사를 사용할 뿐 아니라, 데이터 검색에 GET 동사를 사용합니다. 웹 프로그래밍 모델은 WebGetAttributeWebInvokeAttribute를 사용하여 서비스 작업과 GET 및 POST 동사를 모두 연결합니다.
  • 여러 데이터 형식. 웹 스타일 서비스는 SOAP 메시지 외에도 여러 종류의 데이터를 처리합니다. 웹 프로그래밍 모델은 WebHttpBindingWebHttpBehavior를 사용하여, XML 문서, JSON 데이터 개체 및 이미지, 비디오 파일, 일반 텍스트와 같은 이진 콘텐츠 스트림을 비롯한 다양한 데이터 형식을 지원합니다.

웹 프로그래밍 모델은 REST 서비스, AJAX 서비스와 JSON 서비스 및 배포(ATOM/RSS) 피드가 포함된 웹 스타일 시나리오를 포함하도록 WCF 적용 범위를 확장합니다. AJAX 및 JSON 서비스에 대한 자세한 내용은 AJAX 통합 및 JSON 지원을 참조하십시오. 배포에 대한 자세한 내용은 WCF 배포 개요를 참조하십시오.

UriTemplate 및 UriTemplateTable을 사용한 URI 처리

URI 템플릿은 구조적으로 비슷한 아주 많은 URI 집합을 나타내기 위한 효율적인 구문을 제공합니다. 예를 들면 다음 템플릿은 중간 세그먼트 값에 관계없이 "a"로 시작해서 "c"로 끝나는 세 개의 세그먼트로 구성된 URI 집합(a/{segment}/c)을 나타냅니다.

이 템플릿에서는 다음과 같은 URI를 설명합니다.

  • a/x/c
  • a/y/c
  • a/z/c

이 템플릿에서 중괄호 표기법("{segment}")은 리터럴 값 대신 변수 세그먼트를 나타냅니다.

.NET Framework 3.5는 UriTemplate이라는 URI 템플릿으로 작업하기 위한 새 API를 제공합니다. UriTemplates를 사용하여 다음 작업을 수행할 수 있습니다.

  • 매개 변수 집합으로 Bind 메서드 중 하나를 호출하여, 템플릿에 일치하는 완전 폐쇄형 URI를 생성할 수 있습니다. 즉, URI 템플릿 내에 있는 변수는 모두 실제 값으로 바뀝니다.
  • 후보 URI로 Match()를 호출할 수 있으며, 후보 URI는 템플릿을 사용하여 후보 URI를 구성 부분으로 나누고 템플릿의 변수에 따라 레이블이 지정된 URI의 다른 부분이 포함된 사전을 반환합니다.
  • Bind() 및 Match()는 서로가 반대이므로, 사용자는 Match(Bind( x ))를 호출하고 시작한 환경으로 돌아갈 수 있습니다.

대부분의 경우, 특히 URI를 기반으로 서비스 작업에 대한 요청을 디스패치해야 하는 서버에서는 포함된 각 템플릿을 독립적으로 처리할 수 있는 데이터 구조의 UriTemplate 개체 집합을 추적하고자 할 수 있습니다. UriTemplateTable은 URI 템플릿 집합을 나타내고 템플릿 집합 및 후보 URI에 제공된 가장 일치하는 항목을 선택합니다. 이는 WCF를 포함하여 어떠한 특정 네트워킹 스택과도 관련이 없으므로 필요할 때마다 사용할 수 있습니다.

WCF 서비스 모델은 UriTemplateUriTemplateTable을 사용하여, UriTemplate에서 설명한 URI 집합과 서비스 작업을 연결합니다. 서비스 작업은 WebGetAttribute 또는 WebInvokeAttribute를 사용하여 UriTemplate과 연결됩니다.

서비스 작업 매개 변수 및 URL

웹 스타일 서비스는 서비스 작업과 관련된 URL을 입력하여 웹 브라우저에서 호출할 수 있습니다. 이러한 서비스 작업은 URL 내의 문자열 형식에 지정해야 하는 매개 변수를 가져올 수 있습니다. 다음 표에서는 URL 내에서 전달할 수 있는 형식과 사용된 형식을 보여 줍니다.

형식 형식

Byte

0 - 255

SByte

-128 - 127

Int16

-32768 - 32767

Int32

-2,147,483,648 - 2,147,483,647

Int64

-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807

UInt16

0 - 65535

UInt32

0 - 4,294,967,295

UInt64

0 - 18,446,744,073,709,551,615

Single

-3.402823e38 - 3.402823e38(지수 표기법이 필요하지 않음)

Double

-1.79769313486232e308 - 1.79769313486232e308(지수 표기법이 필요하지 않음)

Char

단일 문자

Decimal

표준 표기법으로 나타낸 10진수(지수 없음)

Boolean

True 또는 False(대/소문자 구분 안 함)

String

모든 문자열(null 문자열이 지원되지 않으며 이스케이프가 수행되지 않음)

DateTime

MM/DD/YYYY

MM/DD/YYYY HH:MM:SS [AM|PM]

월/일/연도

월/일/연도 HH:MM:SS [AM|PM]

TimeSpan

DD.HH:MM:SS

여기서 DD = 일, HH = 시간, MM = 분, SS = 초입니다.

Guid

GUID, 예:

936DA01F-9ABD-4d9d-80C7-02AF85C822A8

DateTimeOffset

MM/DD/YYYY HH:MM:SS MM:SS

여기서 DD = 일, HH = 시간, MM = 분, SS = 초입니다.

열거형

다음 코드에서처럼 열거형을 정의하는 예제의 열거형 값입니다.

public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

개별 열거형 값 또는 해당 정수 값은 쿼리 문자열에 지정할 수 있습니다.

문자열 표현과 형식을 서로 변환할 수 있는 TypeConverterAttribute가 있는 형식입니다.

형식 변환기에 따라 다릅니다.

WebGet 및 WebInvoke

웹 스타일 서비스는 다양한 호출 동사(예: SOAP 서비스에 사용된 동사인 HTTP POST)뿐만 아니라 검색 동사(예: HTTP GET)를 사용합니다. 서비스 개발자는 웹 프로그래밍 모델을 사용하여, WebGetAttributeWebInvokeAttribute로 URI 템플릿 및 해당 서비스 작업과 관련된 동사를 제어할 수 있습니다. WebGetAttributeWebInvokeAttribute를 사용하면 개별 작업이 URI 및 이러한 URI와 관련된 HTTP 메서드에 바인딩되는 방법을 제어할 수 있습니다. 예를 들어 다음 코드에 WebGetAttributeWebInvokeAttribute를 추가합니다.

[ServiceContract]
interface ICustomer
{
  //"View It"
  [OperationContract]
  [WebGet]
  Customer GetCustomer():
  
  //"Do It"
  [OperationContract]
  [WebInvoke]
  Customer UpdateCustomerName( string id, 
                               string newName );
}

이전 코드를 통해 다음과 같은 HTTP 요청을 만들 수 있습니다.

GET /GetCustomer

POST /UpdateCustomerName

WebInvokeAttribute는 기본적으로 POST로 설정되지만 다른 동사에도 사용할 수 있습니다.

[ServiceContract]
interface ICustomer
{
  //"View It“ -> HTTP GET
  [OperationContract]
  [WebGet( UriTemplate=“customers/{id}” )]
  Customer GetCustomer( string id ):
  
  //"Do It“ -> HTTP PUT
  [OperationContract]
  [WebInvoke( UriTemplate=“customers/{id}”, Method=“PUT” )]
  Customer UpdateCustomer( string id, Customer newCustomer );
}

형식 및 웹 프로그래밍 모델

웹 프로그래밍 모델에는 서로 다른 다양한 데이터 형식으로 작업할 수 있는 새로운 기능이 있습니다. WebHttpBinding은 바인딩 계층에서 다음과 같은 여러 종류의 데이터를 읽고 쓸 수 있습니다.

  • XML
  • JSON
  • 불투명 이진 스트림

즉, 웹 프로그래밍 모델에서 모든 형식의 데이터를 처리할 수 있지만, 사용자가 Stream에 대해 직접 프로그래밍할 수 있습니다.

.NET Framework 3.5에서는 JSON 데이터(AJAX)와 배포 피드(ATOM 및 RSS 포함)를 지원합니다. 이러한 기능에 대한 자세한 내용은 WCF 배포 개요를 및 AJAX 통합 및 JSON 지원을 참조하십시오.

참고 항목

개념

WCF 웹 프로그래밍 개체 모델

기타 리소스

WCF 배포
웹 프로그래밍 모델