다음을 통해 공유


Windows Communication Foundation Services에 대한 바인딩 구성

애플리케이션을 만들 때 애플리케이션을 배포한 후 관리자에 대한 결정을 연기하려는 경우가 많습니다. 예를 들어 서비스 주소 또는 URI(Uniform Resource Identifier)가 무엇인지 미리 알 방법이 없는 경우가 많습니다. 주소를 하드 코딩하는 대신 관리자가 서비스를 만든 후 이 작업을 수행할 수 있도록 하는 것이 좋습니다. 이러한 유연성은 구성을 통해 수행됩니다.

비고

ServiceModel 메타데이터 유틸리티 도구(Svcutil.exe)를 스위치와 함께 /config 사용하여 구성 파일을 빠르게 만듭니다.

주요 섹션

WCF(Windows Communication Foundation) 구성표에는 다음과 같은 세 가지 주요 섹션(serviceModelbindingsservices)이 포함됩니다.

<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>  

참고하십시오