애플리케이션을 만들 때 애플리케이션을 배포한 후 관리자에 대한 결정을 연기하려는 경우가 많습니다. 예를 들어 서비스 주소 또는 URI(Uniform Resource Identifier)가 무엇인지 미리 알 방법이 없는 경우가 많습니다. 주소를 하드 코딩하는 대신 관리자가 서비스를 만든 후 이 작업을 수행할 수 있도록 하는 것이 좋습니다. 이러한 유연성은 구성을 통해 수행됩니다.
비고
ServiceModel 메타데이터 유틸리티 도구(Svcutil.exe)를 스위치와 함께 /config
사용하여 구성 파일을 빠르게 만듭니다.
주요 섹션
WCF(Windows Communication Foundation) 구성표에는 다음과 같은 세 가지 주요 섹션(serviceModel
bindings
및services
)이 포함됩니다.
<configuration>
<system.serviceModel>
<bindings>
</bindings>
<services>
</services>
<behaviors>
</behaviors>
</system.serviceModel>
</configuration>
ServiceModel 요소
요소로 system.ServiceModel
바인딩된 섹션을 사용하여 하나 이상의 엔드포인트가 있는 서비스 유형과 서비스에 대한 설정을 구성할 수 있습니다. 그런 다음 각 엔드포인트를 주소, 계약 및 바인딩으로 구성할 수 있습니다. 엔드포인트에 대한 자세한 내용은 엔드포인트 만들기 개요를 참조하세요. 엔드포인트가 지정되지 않은 경우 런타임은 기본 엔드포인트를 추가합니다. 기본 엔드포인트, 바인딩 및 동작에 대한 자세한 내용은 단순화된 구성 및 WCF 서비스를 위한 단순화된 구성을 참조하세요.
바인딩은 전송(HTTP, TCP, 파이프, 메시지 큐) 및 프로토콜(보안, 안정성, 트랜잭션 흐름)을 지정하고 각각 엔드포인트가 전 세계와 통신하는 방식의 측면을 지정하는 바인딩 요소로 구성됩니다.
예를 들어 basicHttpBinding< 요소를 지정하면> HTTP를 엔드포인트에 대한 전송으로 사용하도록 나타냅니다. 이 엔드포인트를 사용하는 서비스가 열릴 때 런타임에 엔드포인트를 연결하는 데 사용됩니다.
바인딩에는 미리 정의된 바인딩과 사용자 지정의 두 종류가 있습니다. 미리 정의된 바인딩에는 일반적인 시나리오에서 사용되는 요소의 유용한 조합이 포함되어 있습니다. WCF에서 제공하는 미리 정의된 바인딩 형식 목록은 System-Provided 바인딩을 참조하세요. 미리 정의된 바인딩 컬렉션에 서비스 애플리케이션에 필요한 기능의 올바른 조합이 없는 경우 애플리케이션의 요구 사항에 맞게 사용자 지정 바인딩을 생성할 수 있습니다. 사용자 지정 바인딩에 대한 자세한 내용은 customBinding을 참조<하세요>.
다음 네 가지 예제에서는 WCF 서비스를 설정하는 데 사용되는 가장 일반적인 바인딩 구성을 보여 줍니다.
바인딩 형식을 사용할 엔드포인트 지정
첫 번째 예제에서는 주소, 계약 및 바인딩으로 구성된 엔드포인트를 지정하는 방법을 보여 줍니다.
<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<!-- This section is optional with the default configuration introduced
in .NET Framework 4. -->
<endpoint
address="/HelloWorld2/"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding" />
</service>
이 예제에서 특성은 name
구성의 서비스 유형을 나타냅니다. 계약을 사용하여 코드 HelloWorld
에서 서비스를 만들면 예제 구성에 정의된 모든 엔드포인트를 사용하여 서비스가 초기화됩니다. 어셈블리가 하나의 서비스 계약 name
만 구현하는 경우 서비스에서 사용 가능한 유일한 형식을 사용하므로 특성을 생략할 수 있습니다. 특성은 특정 형식인 문자열을 받아들여야 합니다. Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
이 특성은 address
다른 엔드포인트가 서비스와 통신하는 데 사용하는 URI를 지정합니다. URI는 절대 경로 또는 상대 경로일 수 있습니다. 상대 주소가 제공되면 호스트는 바인딩에 사용되는 전송 체계에 적합한 기본 주소를 제공해야 합니다. 주소가 구성되지 않은 경우 기본 주소는 해당 엔드포인트의 주소로 간주됩니다.
이 contract
엔드포인트가 노출하는 계약을 지정하는 특성입니다. 서비스 구현 형식은 계약 유형을 구현해야 합니다. 서비스 구현에서 단일 계약 형식을 구현하는 경우 이 속성을 생략할 수 있습니다.
이 특성은 binding
이 특정 엔드포인트에 사용할 미리 정의된 바인딩 또는 사용자 지정 바인딩을 선택합니다. 바인딩을 명시적으로 선택하지 않는 엔드포인트는 기본 바인딩 선택(예 BasicHttpBinding
: .)을 사용합니다.
미리 정의된 바인딩 수정
다음 예제에서는 미리 정의된 바인딩이 수정됩니다. 그런 다음 서비스에서 엔드포인트를 구성하는 데 사용할 수 있습니다. 바인딩은 값을 1초로 설정 ReceiveTimeout 하여 수정됩니다. 이 속성은 개체를 반환합니다 TimeSpan .
변경된 바인딩은 바인딩 섹션에서 찾을 수 있습니다. 이 변경된 바인딩은 이제 엔드포인트를 만들 때 binding
요소 내에서 endpoint
특성을 설정하여 사용할 수 있습니다.
비고
바인딩 bindingConfiguration
에 특정 이름을 지정하는 경우 서비스 엔드포인트에 지정된 이름이 바인딩과 일치해야 합니다.
<service name="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" />
</service>
<bindings>
<basicHttpBinding
receiveTimeout="00:00:01"
/>
</bindings>
서비스에 적용할 동작 구성
다음 예제에서는 서비스 유형에 대해 특정 동작이 구성됩니다. 이 ServiceMetadataBehavior
요소는 ServiceModel 메타데이터 유틸리티 도구(Svcutil.exe) 를 사용하여 서비스를 쿼리하고 메타데이터에서 WSDL(Web Services Description Language) 문서를 생성할 수 있도록 하는 데 사용됩니다.
비고
동작 behaviorConfiguration
에 특정 이름을 지정하는 경우 서비스 또는 엔드포인트 섹션에 지정된 이름이 일치해야 합니다.
<behaviors>
<behavior>
<ServiceMetadata httpGetEnabled="true" />
</behavior>
</behaviors>
<services>
<service
name="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" />
</service>
</services>
이전 구성을 사용하면 클라이언트가 "HelloWorld" 형식 서비스의 메타데이터를 호출하고 가져올 수 있습니다.
svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl
서로 다른 바인딩 값을 사용하여 두 개의 엔드포인트가 있는 서비스 지정
이 마지막 예제에서는 서비스 유형에 대해 두 개의 엔드포인트가 HelloWorld
구성됩니다. 각 엔드포인트는 동일한 바인딩 형식의 다른 사용자 지정 bindingConfiguration
특성을 사용하며, 각각이 basicHttpBinding
을 수정합니다.
<service name="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="http://computer:8080/Hello1"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="shortTimeout" />
<endpoint
address="http://computer:8080/Hello2"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="Secure" />
</service>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure">
<Security mode="Transport" />
</basicHttpBinding>
</bindings>
다음 예제와 같이 섹션을 추가하고 protocolMapping
바인딩을 구성하여 기본 구성을 사용하여 동일한 동작을 얻을 수 있습니다.
<protocolMapping>
<add scheme="http" binding="basicHttpBinding" bindingConfiguration="shortTimeout" />
<add scheme="https" binding="basicHttpBinding" bindingConfiguration="Secure" />
</protocolMapping>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure" />
<Security mode="Transport" />
</bindings>