Windows Communication Foundation 서비스에 대한 바인딩 구성
응용 프로그램을 만들 때 응용 프로그램의 배포 후 관리자에게 결정을 맡겨야 할 경우가 있습니다. 예를 들어, 서비스 주소 또는 URI(Uniform Resource Identifier)가 무엇인지 미리 알 수 없는 경우가 있습니다. 주소를 하드 코딩하는 대신 관리자가 서비스를 작성한 후에 이를 수행하도록 하는 것이 좋습니다. 이러한 유연성은 구성을 통해 수행됩니다.
참고
구성 파일을 신속하게 만들려면 /config 스위치와 함께 ServiceModel Metadata Utility Tool (Svcutil.exe)를 사용합니다.
주요 섹션
WCF(Windows Communication Foundation) 구성 체계에는 serviceModel, bindings 및 services의 세 가지 주요 섹션이 있습니다.
<configuration>
<system.serviceModel>
<bindings>
</bindings>
<services>
</services>
<behaviors>
</behaviors>
</system.serviceModel>
</configuration>
ServiceModel Elements
system.ServiceModel 요소로 제한된 섹션을 사용하여 서비스의 설정뿐 아니라 하나 이상의 끝점이 있는 서비스 형식을 구성할 수 있습니다. 각 끝점은 주소, 계약 및 바인딩과 함께 구성할 수 있습니다. 끝점에 대한 자세한 내용은 끝점 만들기 개요를 참조하십시오.
바인딩은 전송(HTTP, TCP, 파이프, 메시지 큐) 및 프로토콜(보안, 안전성, 트랜잭션 흐름)을 지정하며, 끝점이 외부와 통신하는 방법을 지정하는 각각의 바인딩 요소로 구성됩니다.
예를 들어, basicHttpBinding 요소를 지정하면 끝점에 대한 전송으로 HTTP를 사용함을 나타냅니다. 이 끝점을 사용하는 서비스가 열려 있는 경우 이 요소는 런타임에 끝점을 연결하는 데 사용됩니다.
바인딩에는 미리 정의된 바인딩 및 사용자 지정 바인딩의 두 종류가 있습니다. 미리 정의된 바인딩에는 일반적인 시나리오에서 사용되는 유용한 요소의 조합이 있습니다. WCF에서 제공하는 미리 정의된 바인딩 형식의 목록은 시스템 제공 바인딩을 참조하십시오. 서비스 응용 프로그램에서 필요로 하는 올바른 기능의 조합을 가진 미리 정의된 바인딩 컬렉션이 없는 경우 사용자 지정 바인딩을 만들어 응용 프로그램의 요구 사항을 충족시킬 수 있습니다. 사용자 지정 바인딩에 대한 자세한 내용은 <customBinding>을 참조하십시오.
다음 4개의 예제에서는 WCF 서비스를 설정하는 데 사용되는 가장 일반적인 바인딩 구성을 보여 줍니다.
끝점을 지정하여 바인딩 형식 사용
첫 번째 예제에서는 주소, 계약 및 바인딩으로 구성된 끝점을 지정하는 방법에 대해 보여 줍니다.
<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="/HelloWorld2/"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</endpoint>
</service>
이 예제에서 type 특성은 구성의 서비스 형식을 나타냅니다. HelloWorld
계약을 사용하여 코드에 서비스를 만드는 경우 서비스는 예제 구성에 정의된 모든 끝점으로 초기화됩니다. 어셈블리에서 하나의 서비스 계약만 구현되는 경우 서비스는 사용 가능한 형식만 사용하므로 type 특성이 생략될 수 있습니다. 특성에는 Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
형식으로 된 문자열만 있습니다.
address 특성은 다른 끝점이 서비스와 통신하는 데 사용하는 URI를 지정합니다. URI는 절대 경로 또는 상대 경로일 수 있습니다. 상대 주소가 제공되는 경우 호스트는 바인딩에 사용된 전송 체계에 적합한 기본 주소를 제공합니다. 주소가 구성되지 않으면 해당 끝점의 주소를 기본 주소로 가정합니다.
contract 특성은 이 끝점이 공개하는 계약을 지정합니다. 서비스 구현 형식은 계약 형식을 구현해야 합니다. 서비스 구현에서 단일 계약 형식을 구현하는 경우 이 속성을 생략할 수 있습니다.
binding 특성은 이 특정 끝점에 사용할 미리 정의된 바인딩 또는 사용자 지정 바인딩을 선택합니다. 바인딩을 명시적으로 선택하지 않는 끝점에서는 기본 바인딩 선택인 BasicHttpBinding이 사용됩니다.
미리 정의된 바인딩 수정
다음 예제에서는 미리 정의된 바인딩을 수정하고 명명합니다. 그런 다음 서비스에서 끝점을 구성하는 데 해당 바인딩을 사용할 수 있습니다. 바인딩은 ReceiveTimeout 값을 1초로 설정하여 수정합니다. 속성은 TimeSpan 개체를 반환합니다.
변경된 해당 바인딩은 바인딩 섹션에 있으며, 변경된 바인딩에는 name 특성에 의해 설정된 고유한 이름인 shortTimeout
이 지정됩니다. 끝점을 만들 때 endpoint 요소에 있는 binding 특성을 고유한 이름으로 설정하면 변경된 이 바인딩을 사용할 수 있습니다. 이렇게 하면 개수에 제한 없이 표준 바인딩의 변형을 만들 수 있습니다.
참고
표준 바인딩의 변형을 만들지 않는 경우 bindingConfiguration 특성을 값으로 설정할 필요가 없습니다. 이 경우 수정되지 않은 미리 정의된 바인딩이 사용됩니다.
<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="/HelloWorld2/"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</endpoint>
</service>
<bindings>
<basicHttpBinding
name="shortTimeout"
receiveTimeout="00:00:01"
/>
</bindings>
서비스에 적용할 동작 구성
다음 예제에서는 특정 동작이 서비스 형식에 맞게 구성됩니다. metadataPublishing 요소는 서비스를 쿼리하고 메타데이터에서 WSDL(웹 서비스 기술 언어) 문서를 생성하기 위해 ServiceModel Metadata Utility Tool (Svcutil.exe)를 활성화하는 데 사용됩니다.
<behaviors>
<behavior name="MetaPlusExceptions" >
<metadataPublishing enableGetWsdl="true" />
</behavior>
</behaviors>
<services>
<service
type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
serviceBehaviorName="MetaPlusExceptions">
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</endpoint>
</service>
</services>
앞의 구성을 사용하면 클라이언트에서 다음을 호출하고,
svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl
"HelloWorld" 형식의 서비스의 메타데이터를 가져올 수 있습니다.
다른 바인딩 값을 사용하는 두 개의 끝점으로 서비스 지정
마지막 이 예제에서는 두 개의 끝점이 Hello
서비스 형식에 맞게 구성됩니다. 각 끝점은 동일한 바인딩 형식의 서로 다른 사용자 지정 bindingConfiguration 특성을 사용하며, 각 특성은 basicHttpBinding을 수정합니다.
<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="shortTimeout"
</endpoint>
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="Secure"
</endpoint>
</service>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure" />
<Security mode="Transport" />
</bindings>