다음을 통해 공유


WCF 웹 HTTP 프로그래밍 모델 개요

WCF(Windows Communication Foundation) WEB HTTP 프로그래밍 모델은 WCF를 사용하여 WEB HTTP 서비스를 빌드하는 데 필요한 기본 요소를 제공합니다. WCF WEB HTTP 서비스는 웹 브라우저를 포함하여 가능한 가장 광범위한 클라이언트에서 액세스하도록 설계되었으며 다음과 같은 고유한 요구 사항이 있습니다.

  • URI 및 URI 처리 URI는 WEB HTTP 서비스 디자인에서 중심 역할을 합니다. WCF WEB HTTP 프로그래밍 모델은 UriTemplateUriTemplateTable 클래스를 사용하여 URI 처리 기능을 제공합니다.

  • GET 및 POST 작업에 대한 지원 웹 HTTP 서비스는 데이터 검색을 위해 GET 동사를 사용하고, 데이터 수정 및 원격 호출을 위해 다양한 호출 동사를 활용합니다. WCF WEB HTTP 프로그래밍 모델은 WebGetAttributeWebInvokeAttribute 사용하여 서비스 작업을 GET 및 PUT, POST 및 DELETE와 같은 다른 HTTP 동사와 연결합니다.

  • 웹 스타일 서비스에 여러 데이터 형식은 SOAP 메시지 외에도 다양한 종류의 데이터를 처리합니다. WCF WEB HTTP 프로그래밍 모델은 WebHttpBindingWebHttpBehavior 사용하여 XML 문서, JSON 데이터 개체 및 이미지, 비디오 파일 또는 일반 텍스트와 같은 이진 콘텐츠 스트림을 비롯한 다양한 데이터 형식을 지원합니다.

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

WEB HTTP 서비스에서 반환할 수 있는 데이터 형식에 대한 추가 제한은 없습니다. WEB HTTP 서비스 작업에서 직렬화 가능한 모든 형식을 반환할 수 있습니다. 웹 브라우저에서 웹 HTTP 서비스 작업을 호출할 수 있으므로 URL에 지정할 수 있는 데이터 형식에 제한이 있습니다. 기본적으로 지원되는 형식에 대한 자세한 내용은 아래 UriTemplate 쿼리 문자열 매개 변수 및 URL 섹션을 참조하세요. URL에 지정된 매개 변수를 실제 매개 변수 형식으로 변환하는 방법을 지정하는 고유한 T:System.ServiceModel.Dispatcher.QueryStringConverter 구현을 제공하여 기본 동작을 변경할 수 있습니다. 자세한 내용은 QueryStringConverter 참조하세요.

주의

WCF WEB HTTP 프로그래밍 모델로 작성된 서비스는 SOAP 메시지를 사용하지 않습니다. SOAP는 사용되지 않으므로 WCF에서 제공하는 보안 기능을 사용할 수 없습니다. 그러나 HTTPS를 사용하여 서비스를 호스팅하여 전송 기반 보안을 사용할 수 있습니다. WCF 보안에 대한 자세한 내용은 보안 개요참조하세요.

경고

IIS용 WebDAV 확장을 설치하면 WebDAV 확장이 모든 PUT 요청을 처리하려고 할 때 웹 HTTP 서비스가 HTTP 405 오류를 반환할 수 있습니다. 이 문제를 해결하려면 WebDAV 확장을 제거하거나 웹 사이트에 대한 WebDAV 확장을 사용하지 않도록 설정할 수 있습니다. 자세한 내용은 IIS 및 WebDav참조하세요.

UriTemplate 및 UriTemplateTable을 사용하여 URI 처리

URI 템플릿은 구조적으로 유사한 큰 URI 집합을 표현하기 위한 효율적인 구문을 제공합니다. 예를 들어 다음 템플릿은 중간 세그먼트의 값에 관계없이 "a"로 시작하고 "c"로 끝나는 세 세그먼트 URI 집합을 모두 표현합니다. a/{segment}/c

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

  • a/x/c

  • a/y/c

  • a/z/c

  • 등등.

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

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

  • 매개 변수 집합을 사용하여 Bind 메서드 중 하나를 호출하여 템플릿과 일치하는 완전히 닫힌 URI 생성할 수 있습니다. 즉, URI 템플릿 내의 모든 변수가 실제 값으로 바뀝니다.

  • 후보 URI를 사용하여 Match()를 호출할 수 있습니다. 이 URI는 템플릿을 사용하여 후보 URI를 해당 구성 요소로 분리하고 템플릿의 변수에 따라 레이블이 지정된 URI의 다른 부분이 포함된 사전을 반환합니다.

  • Bind() 및 Match()는 역방향이므로 Match(Bind(x))를 호출하고 시작한 환경과 동일한 환경으로 돌아올 수 있습니다.

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

WCF 서비스 모델은 UriTemplateUriTemplateTable 사용하여 서비스 작업을 UriTemplate설명된 URI 집합과 연결합니다. 서비스 작업은 WebGetAttribute 또는 WebInvokeAttribute사용하여 UriTemplate와 연결된 것입니다. UriTemplateUriTemplateTable대한 자세한 내용은 UriTemplate 및 UriTemplateTable참조하세요.

WebGet 및 WebInvoke 특성

WCF WEB HTTP 서비스는 다양한 호출 동사(예: HTTP POST, PUT 및 DELETE)와 함께 검색 동사(예: HTTP GET)를 사용합니다. WCF WEB HTTP 프로그래밍 모델을 사용하면 서비스 개발자가 WebGetAttributeWebInvokeAttribute서비스 작업과 연결된 URI 템플릿과 동사를 모두 제어할 수 있습니다. WebGetAttributeWebInvokeAttribute 통해 개별 작업이 URI 및 해당 URI와 연결된 HTTP 메서드에 바인딩되는 방법을 제어할 수 있습니다. 예를 들어 다음 코드에서 WebGetAttributeWebInvokeAttribute 추가합니다.

[ServiceContract]
interface ICustomer
{
  //"View It"

  [WebGet]
  Customer GetCustomer():

  //"Do It"
    [WebInvoke]
  Customer UpdateCustomerName( string id,
                               string newName );
}

위의 코드를 사용하면 다음 HTTP 요청을 수행할 수 있습니다.

GET /GetCustomer

POST /UpdateCustomerName

WebInvokeAttribute 기본값은 POST이지만 다른 동사에도 사용할 수 있습니다.

[ServiceContract]
interface ICustomer
{
  //"View It" -> HTTP GET
    [WebGet( UriTemplate="customers/{id}" )]
  Customer GetCustomer( string id ):

  //"Do It" -> HTTP PUT
  [WebInvoke( UriTemplate="customers/{id}", Method="PUT" )]
  Customer UpdateCustomer( string id, Customer newCustomer );
}

WCF WEB HTTP 프로그래밍 모델을 사용하는 WCF 서비스의 전체 샘플은 방법: 기본 WCF 웹 HTTP 서비스만들기를 참조하세요.

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 지수 없이 표준 표기법으로 된 십진수
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 = Days, HH = Hours, MM = minutes, SS = Seconds
Guid 예를 들어 GUID는 다음과 같습니다.

936DA01F-9ABD-4d9d-80C7-02AF85C822A8
DateTimeOffset MM/DD/YYYY HH:MM:SS MM:SS

여기서 DD = Days, HH = Hours, MM = minutes, SS = Seconds
열거형 예를 들어, 다음의 코드에 나타난 열거형을 정의하는 열거 값입니다.

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

개별 열거형 값(또는 해당 정수 값)을 쿼리 문자열에 지정할 수 있습니다.
문자열 표현과 형식을 변환할 수 있는 TypeConverterAttribute 있는 형식입니다. 형식 변환기에 따라 다릅니다.

형식 및 WCF WEB HTTP 프로그래밍 모델

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

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

즉, WCF WEB HTTP 프로그래밍 모델은 모든 형식의 데이터를 처리할 수 있지만, Stream을(를) 상대로 프로그래밍할 때 문제를 겪을 수 있습니다.

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

WCF WEB HTTP 프로그래밍 모델 및 보안

WCF WEB HTTP 프로그래밍 모델은 WS-* 프로토콜을 지원하지 않으므로 WCF WEB HTTP 서비스를 보호하는 유일한 방법은 SSL을 사용하여 HTTPS를 통해 서비스를 노출하는 것입니다. IIS 7.0을 사용하여 SSL을 설정하는 방법에 대한 자세한 내용은 IISSSL을 구현하는 방법을 참조하세요.

WCF WEB HTTP 프로그래밍 모델 문제 해결

ChannelFactoryBase<TChannel>을 사용하여 WCF WEB HTTP 서비스를 호출하고 채널을 만들 때, 구성 파일에 설정된 EndpointAddressWebHttpBehavior이 사용합니다. 이는 설령 ChannelFactoryBase<TChannel>에 다른 EndpointAddress이 전달되더라도 마찬가지입니다.

참고 항목