메타데이터 샘플은 서비스의 메타데이터 게시 기능을 제어하는 방법을 보여 줍니다. 잠재적으로 중요한 서비스 메타데이터의 의도하지 않은 공개를 방지하기 위해 WCF(Windows Communication Foundation) 서비스의 기본 구성은 메타데이터 게시를 사용하지 않도록 설정합니다. 이 동작은 기본적으로 안전하지만 서비스의 메타데이터 게시 동작을 구성에서 명시적으로 사용하도록 설정하지 않는 한 메타데이터 가져오기 도구(예: Svcutil.exe)를 사용하여 서비스를 호출하는 데 필요한 클라이언트 코드를 생성할 수 없음을 의미합니다.
중요합니다
명확성을 위해 이 샘플에서는 보안되지 않은 메타데이터 게시 엔드포인트를 만드는 방법을 보여 줍니다. 이러한 엔드포인트는 익명의 인증되지 않은 소비자가 사용할 수 있으며, 서비스의 메타데이터를 공개적으로 공개하는 것이 적절한지 확인하기 위해 이러한 엔드포인트를 배포하기 전에 주의해야 합니다. 사용자 지정 보안 메타데이터 엔드포인트를 보호하는 예제를 보려면 Custom Secure Metadata Endpoint 샘플을 참조하세요.
샘플은 Getting Started에 기반하며, ICalculator
서비스 계약을 구현합니다. 이 샘플에서 클라이언트는 콘솔 애플리케이션(.exe)이며 서비스는 IIS(인터넷 정보 서비스)에서 호스팅됩니다.
비고
이 샘플에 대한 설치 절차 및 빌드 지침은 이 항목의 끝에 있습니다.
서비스에서 메타데이터 ServiceMetadataBehavior 를 노출하려면 서비스에서 구성해야 합니다. 이 동작이 있는 경우 MEX(WS-MetadataExchange) 프로토콜의 구현으로 계약을 노출 IMetadataExchange 하도록 엔드포인트를 구성하여 메타데이터를 게시할 수 있습니다. 편의상 이 계약에는 "IMetadataExchange"의 축약된 구성 이름이 지정되었습니다. 이 샘플에서는 보안 모드mexHttpBinding
가 wsHttpBinding
설정된 것과 동일한 None
편리한 표준 바인딩인 를 사용합니다. "mex"의 상대 주소는 엔드포인트에서 사용되며, 서비스 기본 주소에 대해 확인되면 엔드포인트 주소가 http://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,
http://localhost/servicemodelsamples/service.svc?wsdl -->
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
다음은 MEX 엔드포인트를 보여줍니다.
<!-- the MEX endpoint is exposed at
http://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을 보려면 주소를 http://localhost/servicemodelsamples/service.svc?wsdl
사용합니다. 이 동작을 사용하여 HttpsGetEnabled을(를) true
으로 설정하면 HTTPS를 통해 메타데이터를 노출할 수 있습니다. 이렇게 하려면 HTTPS 기본 주소가 필요합니다.
서비스의 MEX 엔드포인트에 액세스하려면 ServiceModel 메타데이터 유틸리티 도구(Svcutil.exe)를 사용합니다.
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
그러면 서비스의 메타데이터를 기반으로 클라이언트가 생성됩니다.
HTTP GET을 사용하여 서비스의 메타데이터에 액세스하려면 브라우저를 열어 http://localhost/servicemodelsamples/service.svc?wsdl
로 이동합니다.
이 동작을 제거하고 서비스를 열려고 하면 예외가 발생합니다. 이 오류는 기능이 없으면 IMetadataExchange
컨트랙트로 구성된 엔드포인트에 구현이 없기 때문에 발생합니다.
설정 HttpGetEnabled
false
하면 서비스의 메타데이터를 보는 대신 CalculatorService 도움말 페이지가 표시됩니다.
샘플을 설정, 빌드 및 실행하려면
Windows Communication Foundation 샘플 에 대한One-Time 설정 절차를 수행했는지 확인합니다.
솔루션의 C# 또는 Visual Basic .NET 버전을 빌드하려면 Windows Communication Foundation 샘플빌드의 지침을 따릅니다.
단일 또는 컴퓨터 간 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플실행의 지침을 따릅니다.