다음을 통해 공유


Metadata Publishing Behavior

Metadata Publishing Behavior 샘플에서는 서비스의 메타데이터 게시 기능을 제어하는 방법을 보여 줍니다. 중요한 서비스 메타데이터를 실수로 공개하는 일이 발생하지 않도록 WCF(Windows Communication Foundation) 서비스의 기본 구성에서는 메타데이터 게시를 사용하지 않도록 설정합니다. 이 동작은 기본적으로 안전하지만, 구성에서 서비스의 메타데이터 게시 동작을 사용하도록 명시적으로 설정하지 않은 경우 Svcutil.exe와 같은 메타데이터 가져오기 도구를 사용하여 서비스 호출에 필요한 클라이언트 코드를 생성할 수 없습니다.

참고

명확한 설명을 위해 이 샘플에서는 보안이 설정되지 않은 메타데이터 게시 끝점을 만드는 방법을 보여 줍니다. 이러한 끝점은 인증되지 않은 익명의 소비자가 사용할 수 있으므로 이러한 끝점을 배포하기 전에 서비스의 메타데이터를 공개하는 것이 적절한지 주의를 기울여야 합니다. 메타데이터 끝점의 보안을 설정하는 샘플을 보려면 Custom Secure Metadata Endpoint 샘플을 참조하십시오.

이 샘플은 ICalculator 서비스 계약을 구현하는 Getting Started 샘플을 기반으로 합니다. 이 샘플에서 클라이언트는 콘솔 응용 프로그램(.exe)이고 서비스는 IIS(인터넷 정보 서비스)를 통해 호스팅됩니다.

참고

이 샘플의 설치 절차 및 빌드 지침은 이 항목의 끝부분에 나와 있습니다.

서비스에서 메타데이터를 노출하려면 서비스에 ServiceMetadataBehavior가 구성되어야 합니다. 이 동작이 존재하는 경우 IMetadataExchange 계약을 WS-MetadataExchange(MEX) 프로토콜의 구현으로 노출하도록 끝점을 구성함으로써 메타데이터를 게시할 수 있습니다. 편의상 이 계약에는 "IMetadataExchange"라는 약식 구성 이름이 지정되었습니다. 이 샘플에서는 보안 모드가 None으로 설정된 wsHttpBinding과 동일한 mexHttpBinding이라는 편리한 표준 바인딩을 사용합니다. "mex"의 상대 주소가 끝점에 사용되는데, 이를 서비스의 기본 주소와 비교하여 확인하는 경우 끝점 주소가 https://localhost/servicemodelsamples/service.svc/mex가 됩니다. 다음에서는 동작 구성을 보여 줍니다.

  <behaviors>
    <serviceBehaviors>
      <behavior name="CalculatorServiceBehavior">
        <!-- The serviceMetadata behavior publishes metadata through 
             the IMetadataExchange contract. When this behavior is 
             present, you can expose this contract through an endpoint 
             as shown below. Setting httpGetEnabled to true publishes 
             the service's WSDL at the <baseaddress>?wsdl, for example,
             https://localhost/servicemodelsamples/service.svc?wsdl -->
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>

다음에서는 MEX 끝점을 보여 줍니다.

      <!-- the MEX endpoint is exposed at 
           https://localhost/servicemodelsamples/service.svc/mex 
           To expose the IMetadataExchange contract, you 
           must enable the serviceMetadata behavior as demonstrated                         
           previously. -->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />

이 샘플에서는 HttpGetEnabled 속성을 true로 설정하며, 따라서 HTTP GET을 사용하여 서비스의 메타데이터를 노출합니다. HTTP GET 메타데이터 끝점을 사용하려면 서비스가 HTTP 기본 주소를 가져야 합니다. 서비스의 기본 주소에 쿼리 문자열 ?wsdl을 사용하여 메타데이터에 액세스합니다. 예를 들어 웹 브라우저에서 서비스의 WSDL을 보려면 https://localhost/servicemodelsamples/service.svc?wsdl이라는 주소를 사용합니다. 또는 HttpsGetEnabledtrue로 설정하여 HTTPS를 통해 메타데이터를 노출하는 데 이 동작을 사용할 수 있습니다. 이 경우 HTTPS 기본 주소가 필요합니다.

서비스의 MEX 끝점에 액세스하려면 Service Model Metadata Utility Tool (Svcutil.exe)를 사용합니다.

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" https://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

그러면 서비스의 메타데이터를 기준으로 클라이언트가 생성됩니다.

HTTP GET을 사용하여 서비스의 메타데이터에 액세스하려면 브라우저에서 https://localhost/servicemodelsamples/service.svc?wsdl로 이동합니다.

이 동작을 제거하고 서비스를 열려고 시도하면 예외가 발생합니다. 이 동작이 없으면 IMetadataExchange 계약이 구성된 끝점에 구현이 없으므로 그러한 오류가 발생합니다.

HttpGetEnabledfalse로 설정할 경우 서비스의 메타데이터 대신 CalculatorService 도움말 페이지가 나타납니다.

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

  1. Windows Communication Foundation 샘플의 일회 설치 절차를 수행했는지 확인합니다.

  2. C# 또는 Visual Basic .NET 버전의 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.

  3. 단일 컴퓨터 또는 다중 컴퓨터 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.