다음을 통해 공유


WebContentTypeMapper 샘플

WebContentTypeMapper 샘플에서는 새 콘텐츠 형식을 WCF(Windows Communication Foundation) 메시지 본문 형식에 매핑하는 방법을 보여 줍니다.

WebHttpEndpoint 요소는 WCF가 동일한 엔드포인트에서 JSON, XML 또는 원시 이진 메시지를 수신할 수 있도록 웹 메시지 인코더에 플러그를 꽂습니다. 인코더는 요청의 HTTP 콘텐츠 형식을 확인하여 메시지의 본문 형식을 결정합니다. 이 샘플에서는 WebContentTypeMapper 사용자가 콘텐츠 형식과 본문 형식 간의 매핑을 제어할 수 있는 클래스를 소개합니다.

WCF는 콘텐츠 형식에 대한 기본 매핑 집합을 제공합니다. 예를 들어 application/json JSON에 매핑하고 text/xml XML에 매핑합니다. JSON 또는 XML에 매핑되지 않은 모든 콘텐츠 형식은 원시 이진 형식으로 매핑됩니다.

일부 시나리오(예: 푸시 스타일 API)에서 서비스 개발자는 클라이언트에서 반환된 콘텐츠 형식을 제어하지 않습니다. 예를 들어 클라이언트는 JSON text/javascript 을 대신 반환할 application/json수 있습니다. 이 경우 서비스 개발자는 지정된 콘텐츠 유형을 올바르게 처리하기 위해 WebContentTypeMapper에서 파생된 형식을 제공해야 하며, 이는 다음 샘플 코드에서 보여줍니다.

public class JsonContentTypeMapper : WebContentTypeMapper
{
    public override WebContentFormat
               GetMessageFormatForContentType(string contentType)
    {
        if (contentType == "text/javascript")
        {
            return WebContentFormat.Json;
        }
        else
        {
            return WebContentFormat.Default;
        }
    }
}

형식은 GetMessageFormatForContentType(String) 메서드를 재정의해야 합니다. 메서드는 인수를 contentType 평가하고 다음 값 JsonXmlRawDefault중 하나를 반환해야 합니다. 반환 Default은 기본 웹 메시지 인코더 매핑에 위임합니다. 이전 샘플 코드 text/javascript 에서 콘텐츠 형식은 JSON에 매핑되고 다른 모든 매핑은 변경되지 않은 상태로 유지됩니다.

JsonContentTypeMapper 클래스를 사용하려면, Web.config에서 다음을 사용하십시오.

<system.serviceModel>
  <standardEndpoints>
    <webHttpEndpoint>
      <standardEndpoint name="" contentTypeMapper="Microsoft.Samples.WebContentTypeMapper.JsonContentTypeMapper, JsonContentTypeMapper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </webHttpEndpoint>
  </standardEndpoints>
</system.serviceModel>

JsonContentTypeMapper 사용에 대한 요구 사항을 확인하려면 위의 구성 파일에서 contentTypeMapper 특성을 제거합니다. JSON 콘텐츠를 보내는 데 사용 text/javascript 하려고 할 때 클라이언트 페이지가 로드되지 않습니다.

샘플을 설정, 빌드 및 실행하려면

  1. Windows Communication Foundation 샘플 에 대한One-Time 설정 절차를 수행했는지 확인합니다.

  2. Windows Communication Foundation 샘플 빌드에 설명된 대로 WebContentTypeMapperSample.sln 솔루션을 빌드합니다.

  3. http://localhost/ServiceModelSamples/JCTMClientPage.htm로 이동합니다. (프로젝트 디렉터리 내에서 브라우저에서 JCTMClientPage.htm을 열지 마십시오.)