WCF 웹 프로그래밍 개체 모델
HTTP 웹 프로그래밍 모델을 사용하는 개발자는 SOAP 없이 기본 HTTP 요청을 통해 WCF(Windows Communication Foundation) 웹 서비스를 노출할 수 있습니다. HTTP 웹 프로그래밍 모델은 기존 WCF 확장성 모델 위에 빌드되며 다음과 같은 클래스를 정의합니다.
프로그래밍 모델:
채널 및 디스패처 인프라:
유틸리티 클래스 및 확장 지점:
WebGetAttribute
WebGetAttribute 특성은 서비스 작업을 HTTP GET 요청에 응답하는 작업으로 표시하는 데 사용됩니다. 이는 작업 설명에 메타데이터를 추가하는 수동 작업 동작입니다(IOperationBehavior 메서드는 아무 작업도 하지 않음). 작업 설명에서 이 메타데이터를 찾는 동작(특히 WebHttpBehavior)이 서비스의 동작 컬렉션에 추가되지 않으면 WebGetAttribute를 적용해도 아무 효과가 없습니다. WebGetAttribute 특성은 다음 표에 있는 선택적 매개 변수를 사용합니다.
매개 변수 | 설명 |
---|---|
BodyStyle |
특성이 적용된 서비스 작업으로 보내거나 받은 요청 및 응답을 래핑할지 여부를 제어합니다. |
RequestFormat |
요청 메시지의 형식을 지정하는 방법을 제어합니다. |
ResponseFormat |
응답 메시지의 형식을 지정하는 방법을 제어합니다. |
UriTemplate |
특성이 적용된 서비스 작업에 매핑되는 GET 요청을 제어하는 URI 템플릿을 지정합니다. |
WebHttpBinding
WebHttpBinding은 WebMessageEncodingBindingElement를 사용하여 XML, JSON 및 원시 이진 데이터에 대한 지원을 통합합니다. 이는 HttpsTransportBindingElement, HttpTransportBindingElement 및 WebHttpSecurity 개체로 구성됩니다. WebHttpBinding은 WebHttpBehavior와 함께 사용하도록 디자인되었습니다.
WebInvokeAttribute
WebInvokeAttribute 특성은 WebGetAttribute와 비슷하지만 서비스 작업을 GET가 아닌 HTTP 요청에 응답하는 작업으로 표시하는 데 사용됩니다. 이는 작업 설명에 메타데이터를 추가하는 수동 작업 동작입니다(IOperationBehavior 메서드는 아무 작업도 하지 않음). 작업 설명에서 이 메타데이터를 찾는 동작(특히 WebHttpBehavior)이 서비스의 동작 컬렉션에 추가되지 않으면 WebInvokeAttribute를 적용해도 아무 효과가 없습니다.
WebGetAttribute 특성은 다음 표에 있는 선택적 매개 변수를 사용합니다.
매개 변수 | 설명 |
---|---|
BodyStyle |
특성이 적용된 서비스 작업으로 보내거나 받은 요청 및 응답을 래핑할지 여부를 제어합니다. |
Method |
서비스 작업이 매핑되는 HTTP 메서드를 지정합니다. |
RequestFormat |
요청 메시지의 형식을 지정하는 방법을 제어합니다. |
ResponseFormat |
응답 메시지의 형식을 지정하는 방법을 제어합니다. |
UriTemplate |
특성이 적용된 서비스 작업에 매핑되는 GET 요청을 제어하는 URI 템플릿을 지정합니다. |
UriTemplate
UriTemplate 클래스를 사용하면 구조적으로 비슷한 URI 집합을 정의할 수 있습니다. 템플릿은 경로와 쿼리의 두 부분으로 구성됩니다. 경로는 슬래시(/)로 구분된 일련의 세그먼트로 구성됩니다. 각 세그먼트에는 리터럴 값, 변수 값(중괄호[{ }] 안에 표시, 정확히 하나의 세그먼트 내용과 일치하도록 제약됨) 또는 경로의 끝에 표시되어야 하는 와일드카드(별표[*]로 표시, "경로의 나머지 부분"과 일치)가 포함될 수 있습니다. 쿼리 식은 완전히 생략할 수 있습니다. 쿼리 식(있는 경우)은 순서가 지정되지 않은 일련의 이름/값 쌍을 지정합니다. 쿼리 식의 요소는 리터럴 쌍(?x=2) 또는 변수 쌍(?x={value})일 수 있습니다. 쌍으로 되어 있지 않은 값은 사용할 수 없습니다. UriTemplate은 WCF 웹 프로그래밍 모델에서 특정 URI 또는 URI 그룹을 서비스 작업에 매핑하는 데 내부적으로 사용됩니다.
UriTemplateTable
UriTemplateTable 클래스는 개발자가 선택한 개체에 바인딩된 UriTemplate 개체의 관련 집합을 나타냅니다. 이 클래스를 사용하면 집합의 템플릿에 대해 후보 URI(Uniform Resource Identifier)를 일치시키고 일치하는 템플릿과 연결된 데이터를 검색할 수 있습니다. UriTemplateTable은 WCF 웹 프로그래밍 모델에서 특정 URI 또는 URI 그룹을 서비스 작업에 매핑하는 데 내부적으로 사용됩니다.
WebServiceHost
WebServiceHost는 비SOAP 웹 스타일 서비스를 보다 쉽게 호스팅할 수 있도록 ServiceHost를 확장합니다. WebServiceHost는 서비스 설명에서 끝점을 찾지 못하는 경우 자동으로 서비스의 기본 주소에 기본 끝점을 만듭니다. 기본 HTTP 끝점을 만들 때 WebServiceHost는 메타데이터 끝점이 기본 HTTP 끝점에 방해가 되지 않도록 HTTP 도움말 페이지 및 WSDL(웹 서비스 기술 언어) GET 기능을 사용하지 않도록 설정합니다. WebServiceHost는 또한 WebHttpBinding을 사용하는 모든 끝점에 필수 WebHttpBehavior가 연결되어 있는지 확인합니다. 마지막으로WebServiceHost는 보안 가상 디렉터리에서 사용될 때 연결된 IIS(인터넷 정보 서비스) 보안 설정과 함께 작동하도록 끝점의 바인딩을 자동으로 구성합니다.
WebServiceHostFactory
WebServiceHostFactory 클래스는 서비스가 IIS(인터넷 정보 서비스) 또는 WAS(Windows Process Activation Service)에서 호스팅될 때 동적으로 WebServiceHost를 만드는 데 사용됩니다. 호스팅 응용 프로그램이 WebServiceHost를 인스턴스화하는 자체 호스팅 서비스와 달리 IIS 또는 WAS에서 호스팅되는 서비스는 이 클래스를 사용하여 서비스에 대한 WebServiceHost를 만듭니다. CreateServiceHost 메서드는 서비스에 대한 들어오는 요청을 수신할 때 호출됩니다.
WebHttpBehavior
WebHttpBehavior는 서비스 모델 계층에서 웹 스타일 서비스 지원에 필요한 필수 포맷터, 작업 선택기 등을 제공합니다. 이 클래스는 WebHttpBinding과 함께 사용되는 끝점 동작으로 구현되며 각 끝점에 대해 포맷터와 작업 선택기를 지정하도록 허용하여 동일한 서비스 구현에서 SOAP 끝점과 POX 끝점을 모두 노출할 수 있습니다.
WebHttpBehavior 확장
WebHttpBehavior는 GetOperationSelector, GetReplyClientFormatter, GetRequestClientFormatter, GetReplyDispatchFormatter, GetRequestDispatchFormatter 등과 같은 여러 가지 가상 메서드를 사용하여 확장할 수 있습니다. 개발자는 WebHttpBehavior에서 클래스를 파생하고 이러한 메서드를 재정의하여 기본 동작을 사용자 지정할 수 있습니다.
WebScriptEnablingBehavior는 WebHttpBehavior를 확장한 한 예입니다. WebScriptEnablingBehavior는 WCF(Windows Communication Foundation) 끝점이 브라우저 기반 ASP.NET AJAX 클라이언트로부터 HTTP 요청을 받을 수 있도록 합니다. HTML Form Handler Sample은 이 확장 지점을 사용하는 예를 보여 줍니다.
WebHttpDispatchOperationSelector
WebHttpDispatchOperationSelector는 UriTemplate 및 UriTemplateTable 클래스를 사용하여 호출을 서비스 작업에 디스패치합니다.
호환성
WCF 웹 프로그래밍 모델은 SOAP 기반 메시지를 사용하지 않으므로 WS-* 프로토콜을 지원하지 않습니다. 그러나 SOAP를 사용하는 끝점과 SOAP를 사용하지 않는 끝점 등 두 개의 다른 끝점에 대해 동일한 계약을 노출할 수 있습니다. 이에 대한 예제를 보려면 방법: SOAP 및 웹 클라이언트에 계약 공개를 참조하십시오.
참고 항목
참조
WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebHttpBehavior
WebHttpDispatchOperationSelector