방법: 구성 파일을 사용하여 서비스의 메타데이터 게시
이 항목은 WCF(Windows Communication Foundation) 서비스의 메타데이터 게시를 보여 주는 두 방법 항목 중 하나입니다. 서비스에서 메타데이터를 게시하는 방법을 지정하는 두 가지 방법은 구성 파일을 사용하는 방법과 코드를 사용하는 방법입니다. 이 항목에서는 구성 파일을 사용하여 서비스에 대해 메타데이터를 게시하는 방법에 대해 설명합니다.
![]() |
---|
이 항목에서는 보호되지 않은 방식으로 메타데이터를 게시하는 방법을 보여 줍니다. 즉, 모든 클라이언트가 서비스에서 메타데이터를 검색할 수 있습니다. 서비스에서 보호되는 방식으로 메타데이터를 게시해야 하는 경우에는 Custom Secure Metadata Endpoint를 참조하십시오. |
코드에서 메타데이터를 게시하는 방법에 대한 자세한 내용은 방법: 코드를 사용하여 서비스에 대한 메타데이터 게시를 참조하십시오. 메타데이터를 게시하면 클라이언트에서 WS-Transfer GET 요청을 사용하는 메타데이터 또는 ?wsdl 쿼리 문자열을 사용하는 HTTP/GET 요청을 검색할 수 있습니다. 코드가 작동 중인지 확인하려면 기본 WCF 서비스를 만듭니다. 편의상 다음 코드로 된 기본 자체 호스팅 서비스가 제공됩니다.
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace Metadata.Samples
{
[ServiceContract]
public interface ISimpleService
{
[OperationContract]
string SimpleMethod(string msg);
}
class SimpleService : ISimpleService
{
public string SimpleMethod(string msg)
{
Console.WriteLine("The caller passed in " + msg);
return "Hello " + msg;
}
}
class Program
{
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(SimpleService),
new Uri("https://localhost:8001/MetadataSample"));
try
{
// Open the service host to accept incoming calls
host.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
host.Close();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
Console.Read();
}
}
}
}
이 서비스는 구성 파일을 사용하여 구성된 자체 호스팅 서비스입니다. 다음 구성 파일을 사용해 작업을 시작합니다.
<configuration>
<system.serviceModel>
<services>
<service name="Metadata.Example.SimpleService">
<endpoint address=""
binding="basicHttpBinding"
contract="Metadata.Example.ISimpleService" />
</service>
</services>
<behaviors>
</behaviors>
</system.serviceModel>
</configuration>
응용 프로그램 구성 파일을 사용하여 WCF 서비스의 메타데이터를 게시하려면
App.config 파일 내에서 </services><behaviors> 요소를 닫은 후 요소를 만듭니다.
<behaviors> </behaviors>
<behaviors> <serviceBehaviors> 요소 내에서 요소를 추가합니다.
<behaviors> <serviceBehaviors> </serviceBehaviors> </behaviors>
<behavior><serviceBehaviors> 요소를 name 요소에 추가하고 <behavior> 요소의 특성에 값을 지정합니다.
<behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> </behavior> </serviceBehaviors> </behaviors>
<serviceMetadata> <behavior> 요소를 요소에 추가합니다. httpGetEnabled 특성을 true로 설정하고 policyVersion 특성을 Policy15로 설정합니다. httpGetEnabled를 사용하면 서비스가 HTTP GET 요청으로 수행된 메타데이터 요청에 응답할 수 있습니다. policyVersion에 따라 서비스는 메타데이터를 생성할 때 WS-Policy 1.5를 준수합니다.
<behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> </behavior> </serviceBehaviors> </behaviors>
다음 코드 예제와 같이 behaviorConfiguration 특성을 <service> 요소에 추가하고 1단계에 추가된 <behavior> 요소의 name 특성을 지정합니다.
<services> <service name="Metadata.Example.SimpleService" behaviorConfiguration="SimpleServiceBehavior"> ... </service> </services> <behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> </behavior> </serviceBehaviors> </behaviors>
다음 코드 예제와 같이 계약이 IMetadataExchange로 설정된 하나 이상의 <endpoint> 요소를 추가합니다.
<services> <service name="Metadata.Example.SimpleService" behaviorConfiguration="SimpleServiceBehavior"> <endpoint address="" binding="wsHttpBinding" contract="Metadata.Example.ISimpleService" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services>
이전 단계에 추가된 메타데이터 끝점에 대해 binding 특성을 다음 중 하나로 설정합니다.
HTTP 게시의 경우 mexHttpBinding
HTTPS 게시의 경우 mexHttpsBinding
명명된 파이프 게시의 경우 mexNamedPipeBinding
TCP 게시의 경우 mexTcpBinding
이전 단계에 추가된 메타데이터 끝점에 대해 주소를 다음과 같이 설정합니다.
기본 주소가 메타데이터 바인딩과 동일한 경우 호스트 응용 프로그램의 기본 주소를 게시 지점으로 사용하는 빈 문자열
호스트 응용 프로그램에 기본 주소가 있는 경우 상대 주소
절대 경로
콘솔 응용 프로그램을 빌드하고 실행합니다.
Internet Explorer를 사용하여 서비스의 기본 주소(이 샘플에서는 https://localhost:8001/MetadataSample)를 찾아 메타데이터 게시가 설정되어 있는지 확인합니다. 그렇지 않으면 "이 서비스에 대한 메타데이터 게시는 현재 사용할 수 없습니다."라는 메시지가 결과 페이지의 맨 위에 표시됩니다.
기본 끝점을 사용하려면
기본 끝점을 사용하는 서비스에서 메타데이터를 구성하려면 이전 예제와 같이 구성 파일에 ServiceMetadataBehavior를 구성하되 끝점은 지정하지 마십시오. 이렇게 구성하면 구성 파일이 다음과 같아집니다.
<configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="SimpleServiceBehavior"> <serviceMetadata httpGetEnabled="True" policyVersion="Policy12" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
서비스에 포함된 ServiceMetadataBehavior의 httpGetEnabled가 true로 설정되어 있으므로 서비스의 메타데이터 게시 기능은 사용하도록 설정되었으며, 끝점을 명시적으로 추가하지 않았으므로 런타임이 기본 끝점을 추가합니다. 기본 끝점, 바인딩 및 동작에 대한 자세한 내용은 단순화된 구성 및 Simplified Configuration for WCF Services을 참조하십시오.
예제
다음 코드 예제에서는 기본 WCF 서비스의 구현 및 서비스의 메타데이터를 게시하는 구성 파일을 보여 줍니다.
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace Metadata.Samples
{
[ServiceContract]
public interface ISimpleService
{
[OperationContract]
string SimpleMethod(string msg);
}
class SimpleService : ISimpleService
{
public string SimpleMethod(string msg)
{
Console.WriteLine("The caller passed in " + msg);
return "Hello " + msg;
}
}
class Program
{
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(SimpleService),
new Uri("https://localhost:8001/MetadataSample"));
try
{
// Open the service host to accept incoming calls
host.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
host.Close();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
Console.Read();
}
}
}
}
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="SimpleServiceBehavior">
<serviceMetadata httpGetEnabled="True" policyVersion="Policy12" />
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
참고 항목
작업
방법: 관리되는 응용 프로그램에서 WCF 서비스 호스팅
Self-Host
방법: 코드를 사용하여 서비스에 대한 메타데이터 게시