WCF 웹 프로그래밍 모델 개요
웹 프로그래밍 모델에서는 웹 스타일 서비스를 빌드하는 데 필요한 기본 프레임워크 요소를 WCF(Windows Communication Foundation)에 제공합니다. 웹 스타일 서비스는 클라이언트 프레임워크가 추가되지 않은 웹 브라우저를 비롯한 광범위한 클라이언트에서 액세스할 수 있게 디자인된 것으로, 다음과 같은 고유한 요구 사항이 있습니다.
- URI 및 URI 처리. URI는 웹 스타일 서비스 디자인에서 중요한 역할을 합니다. WCF 웹 프로그래밍 모델은 UriTemplate 및 UriTemplateTable 클래스를 사용하여 URI 처리 기능을 제공합니다.
- GET 및 POST 작업 지원. 웹 스타일 서비스는 데이터 수정 및 원격 호출에 다양한 호출 동사를 사용할 뿐 아니라, 데이터 검색에 GET 동사를 사용합니다. 웹 프로그래밍 모델은 WebGetAttribute 및 WebInvokeAttribute를 사용하여 서비스 작업과 GET 및 POST 동사를 모두 연결합니다.
- 여러 데이터 형식. 웹 스타일 서비스는 SOAP 메시지 외에도 여러 종류의 데이터를 처리합니다. 웹 프로그래밍 모델은 WebHttpBinding 및 WebHttpBehavior를 사용하여, 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 서비스 모델은 UriTemplate 및 UriTemplateTable을 사용하여, UriTemplate에서 설명한 URI 집합과 서비스 작업을 연결합니다. 서비스 작업은 WebGetAttribute 또는 WebInvokeAttribute를 사용하여 UriTemplate과 연결됩니다.
서비스 작업 매개 변수 및 URL
웹 스타일 서비스는 서비스 작업과 관련된 URL을 입력하여 웹 브라우저에서 호출할 수 있습니다. 이러한 서비스 작업은 URL 내의 문자열 형식에 지정해야 하는 매개 변수를 가져올 수 있습니다. 다음 표에서는 URL 내에서 전달할 수 있는 형식과 사용된 형식을 보여 줍니다.
형식 | 형식 |
---|---|
0 - 255 |
|
-128 - 127 |
|
-32768 - 32767 |
|
-2,147,483,648 - 2,147,483,647 |
|
-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807 |
|
0 - 65535 |
|
0 - 4,294,967,295 |
|
0 - 18,446,744,073,709,551,615 |
|
-3.402823e38 - 3.402823e38(지수 표기법이 필요하지 않음) |
|
-1.79769313486232e308 - 1.79769313486232e308(지수 표기법이 필요하지 않음) |
|
단일 문자 |
|
표준 표기법으로 나타낸 10진수(지수 없음) |
|
True 또는 False(대/소문자 구분 안 함) |
|
모든 문자열(null 문자열이 지원되지 않으며 이스케이프가 수행되지 않음) |
|
MM/DD/YYYY MM/DD/YYYY HH:MM:SS [AM|PM] 월/일/연도 월/일/연도 HH:MM:SS [AM|PM] |
|
DD.HH:MM:SS 여기서 DD = 일, HH = 시간, MM = 분, SS = 초입니다. |
|
GUID, 예: 936DA01F-9ABD-4d9d-80C7-02AF85C822A8 |
|
MM/DD/YYYY HH:MM:SS MM:SS 여기서 DD = 일, HH = 시간, MM = 분, SS = 초입니다. |
|
열거형 |
다음 코드에서처럼 열거형을 정의하는 예제의 열거형 값입니다.
개별 열거형 값 또는 해당 정수 값은 쿼리 문자열에 지정할 수 있습니다. |
문자열 표현과 형식을 서로 변환할 수 있는 TypeConverterAttribute가 있는 형식입니다. |
형식 변환기에 따라 다릅니다. |
WebGet 및 WebInvoke
웹 스타일 서비스는 다양한 호출 동사(예: SOAP 서비스에 사용된 동사인 HTTP POST)뿐만 아니라 검색 동사(예: HTTP GET)를 사용합니다. 서비스 개발자는 웹 프로그래밍 모델을 사용하여, WebGetAttribute 및 WebInvokeAttribute로 URI 템플릿 및 해당 서비스 작업과 관련된 동사를 제어할 수 있습니다. WebGetAttribute 및 WebInvokeAttribute를 사용하면 개별 작업이 URI 및 이러한 URI와 관련된 HTTP 메서드에 바인딩되는 방법을 제어할 수 있습니다. 예를 들어 다음 코드에 WebGetAttribute 및 WebInvokeAttribute를 추가합니다.
[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 지원을 참조하십시오.