다음을 통해 공유


방법: 사용자 지정 WS-Metadata Exchange 바인딩 구성

이 항목에서는 사용자 지정 WS-Metadata 교환 바인딩을 구성하는 방법에 대해 설명합니다. WCF(Windows Communication Foundation)에는 시스템 정의 메타데이터 바인딩이 포함되어 있지만 원하는 모든 바인딩을 사용하여 메타데이터를 게시할 수 있습니다. 이 항목에서는 wsHttpBinding을 사용하여 메타데이터를 게시하는 방법을 보여 줍니다. 이 바인딩은 메타데이터를 보안 방법으로 노출하는 옵션을 제공합니다. 이 문서의 코드는 Getting Started Sample을 기반으로 합니다.

구성 파일 사용

  1. 서비스의 구성 파일에서 serviceMetadata 태그를 포함하는 서비스 동작을 추가합니다.

    <behaviors>
       <serviceBehaviors>
         <behavior name="CalculatorServiceBehavior">
           <serviceMetadata httpGetEnabled="True"/>
         </behavior>
       </serviceBehaviors>
    </behaviors>
    
  2. 이 새 동작을 참조하는 서비스 태그에 behaviorConfiguration 특성을 추가합니다.

    <service        name="Microsoft.ServiceModel.Samples.CalculatorService"
    behaviorConfiguration="CalculatorServiceBehavior"> 
    
  3. mex를 지정하는 메타데이터 끝점을 주소로, wsHttpBinding을 바인딩으로, IMetadataExchange를 계약으로 추가합니다.

    <endpoint address="mex"
              binding="wsHttpBinding"
              contract="IMetadataExchange" />
    
  4. 메타데이터 교환 끝점이 올바로 작동하고 있는지 확인하려면 클라이언트 구성 파일에 끝점 태그를 추가합니다.

    <endpoint name="MyMexEndpoint"               address="https://localhost:8000/servicemodelsamples/service/mex"
              binding="wsHttpBinding"
              contract="IMetadataExchange"/>
    
  5. 클라이언트의 Main() 메서드에서 새 MetadataExchangeClient 인스턴스를 만들고, 해당 ResolveMetadataReferences 속성을 true로 설정하고, GetMetadata를 호출한 다음 반환된 메타데이터 컬렉션을 반복합니다.

    string mexAddress = "https://localhost:8000/servicemodelsamples/service/mex";
    
    MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint");
    mexClient.ResolveMetadataReferences = true;
    MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress));
    foreach (MetadataSection section in mdSet.MetadataSections)
    Console.WriteLine("Metadata section: " + section.Dialect.ToString());
    

코드로 구성

  1. WsHttpBinding 바인딩 인스턴스를 만듭니다.

    WSHttpBinding binding = new WSHttpBinding();
    
  2. ServiceHost 인스턴스를 만듭니다.

    ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
    
  3. 서비스 끝점을 추가하고 ServiceMetadataBehavior 인스턴스를 추가합니다.

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress);
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
    smb.HttpGetEnabled = true;
    serviceHost.Description.Behaviors.Add(smb);
    
  4. 앞에서 만든 WSHttpBinding을 지정하여 메타데이터 교환 끝점을 추가합니다.

    serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);
    
  5. 메타데이터 교환 끝점이 올바로 작동하고 있는지 확인하려면 클라이언트 구성 파일에 끝점 태그를 추가합니다.

    <endpoint name="MyMexEndpoint"               address="https://localhost:8000/servicemodelsamples/service/mex"
              binding="wsHttpBinding"
              contract="IMetadataExchange"/>
    
  6. 클라이언트의 Main() 메서드에서 새 MetadataExchangeClient 인스턴스를 만들고, 해당 ResolveMetadataReferences 속성을 true로 설정하고, GetMetadata를 호출한 다음 반환된 메타데이터 컬렉션을 반복합니다.

    string mexAddress = "https://localhost:8000/servicemodelsamples/service/mex";
    
    MetadataExchangeClient mexClient = new MetadataExchangeClient("MyMexEndpoint");
    mexClient.ResolveMetadataReferences = true;
    MetadataSet mdSet = mexClient.GetMetadata(new EndpointAddress(mexAddress));
    foreach (MetadataSection section in mdSet.MetadataSections)
    Console.WriteLine("Metadata section: " + section.Dialect.ToString());
    

참고 항목

개념

메타데이터
메타데이터 게시
메타데이터 끝점 게시

기타 리소스

Metadata Publishing Behavior
Retrieve Metadata