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

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

구성 파일 사용

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

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

    string mexAddress = "http://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());  
    

참고 항목