방법: 사용자 지정 WS-Metadata Exchange 바인딩 구성
이 항목에서는 사용자 지정 WS-Metadata 교환 바인딩을 구성하는 방법에 대해 설명합니다. WCF(Windows Communication Foundation)에는 시스템 정의 메타데이터 바인딩이 포함되어 있지만 원하는 모든 바인딩을 사용하여 메타데이터를 게시할 수 있습니다. 이 항목에서는 wsHttpBinding을 사용하여 메타데이터를 게시하는 방법을 보여 줍니다. 이 바인딩은 메타데이터를 보안 방법으로 노출하는 옵션을 제공합니다. 이 문서의 코드는 Getting Started Sample을 기반으로 합니다.
구성 파일 사용
서비스의 구성 파일에서 serviceMetadata 태그를 포함하는 서비스 동작을 추가합니다.
<behaviors> <serviceBehaviors> <behavior name="CalculatorServiceBehavior"> <serviceMetadata httpGetEnabled="True"/> </behavior> </serviceBehaviors> </behaviors>
이 새 동작을 참조하는 서비스 태그에 behaviorConfiguration 특성을 추가합니다.
<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">
mex를 지정하는 메타데이터 끝점을 주소로, wsHttpBinding을 바인딩으로, IMetadataExchange를 계약으로 추가합니다.
<endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange" />
메타데이터 교환 끝점이 올바로 작동하고 있는지 확인하려면 클라이언트 구성 파일에 끝점 태그를 추가합니다.
<endpoint name="MyMexEndpoint" address="https://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
클라이언트의 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());
코드로 구성
WsHttpBinding 바인딩 인스턴스를 만듭니다.
WSHttpBinding binding = new WSHttpBinding();
ServiceHost 인스턴스를 만듭니다.
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress);
서비스 끝점을 추가하고 ServiceMetadataBehavior 인스턴스를 추가합니다.
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, baseAddress); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(smb);
앞에서 만든 WSHttpBinding을 지정하여 메타데이터 교환 끝점을 추가합니다.
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, mexAddress);
메타데이터 교환 끝점이 올바로 작동하고 있는지 확인하려면 클라이언트 구성 파일에 끝점 태그를 추가합니다.
<endpoint name="MyMexEndpoint" address="https://localhost:8000/servicemodelsamples/service/mex" binding="wsHttpBinding" contract="IMetadataExchange"/>
클라이언트의 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());