다음을 통해 공유


구성 샘플

구성 샘플은 구성 파일을 사용하여 서비스를 검색 가능하게 만드는 방법을 보여 줍니다.

서비스 구성

이 샘플의 구성 파일에서는 다음 두 가지 기능을 보여 줍니다.

  • 표준 UdpDiscoveryEndpoint를 통해 서비스를 검색할 수 있게 만듭니다.

  • 서비스의 애플리케이션 엔드포인트에 대한 검색 관련 정보를 조정하고 표준 엔드포인트의 검색 관련 설정 중 일부를 조정합니다.

검색 가능하도록 설정하려면 서비스의 애플리케이션 구성 파일에서 몇 가지 변경 작업을 수행해야 합니다.

  • ph x="1" /> 요소에 검색 엔드포인트를 추가해야 합니다. 이는 표준 UdpDiscoveryEndpoint 엔드포인트로서, 런타임에서 검색 서비스와 연결하는 시스템 엔드포인트입니다. 검색 서비스는 이 엔드포인트에서 메시지를 수신 대기합니다.

  • <serviceDiscovery> 섹션에 <serviceBehaviors> 동작을 추가합니다. 이 동작은 런타임에 서비스를 검색할 수 있게 해 주며, 앞에서 설명한 검색 엔드포인트를 사용하여 검색 ProbeResolve 메시지를 수신 대기합니다. 이 두 가지 항목을 추가하면 서비스를 지정된 검색 엔드포인트에서 검색할 수 있게 됩니다.

다음 구성 코드 조각에서는 애플리케이션 엔드포인트와 검색 엔드포인트가 정의된 서비스를 보여 줍니다.

<services>
        <service name="Microsoft.Samples.Discovery.CalculatorService"
                 behaviorConfiguration="calculatorServiceBehavior">
          <endpoint address=""
                    binding="wsHttpBinding"
                    contract="Microsoft.Samples.Discovery.ICalculatorService"
                    behaviorConfiguration="endpointBehaviorConfiguration" />
          <endpoint name="udpDiscovery"
                    kind="udpDiscoveryEndpoint"
                endpointConfiguration="adhocDiscoveryEndpointConfiguration"/>        </service>
      </services>

알림을 사용하려면 알림 엔드포인트를 추가해야 합니다. 이렇게 하려면 다음 코드와 같이 구성 파일을 수정합니다.

<serviceDiscovery>
            <announcementEndpoints>
              <endpoint kind="udpAnnouncementEndpoint"/>
            </announcementEndpoints>
          </serviceDiscovery>

알림 엔드포인트를 검색 서비스 동작에 추가하면 서비스에 대한 기본 알림 클라이언트가 만들어집니다. 이렇게 되면 서비스에서 서비스가 열리거나 닫힐 때 각각 온라인 및 오프라인 알림을 보냅니다.

이 구성 파일에서는 추가 동작을 수정하여 이러한 간단한 단계 외의 작업도 수행할 수 있습니다. 특정 엔드포인트를 사용하여 검색 관련 정보를 제어할 수 있습니다. 즉, 사용자가 엔드포인트의 검색 가능 여부를 제어할 수 있으며 해당 엔드포인트를 Scopes 및 사용자 지정 XML 메타데이터로 표시할 수도 있습니다. 이렇게 하려면 애플리케이션 엔드포인트에 behaviorConfiguration 속성을 추가해야 합니다. 이 경우 다음 속성이 애플리케이션 엔드포인트에 추가됩니다.

behaviorConfiguration="endpointBehaviorConfiguration"

이제 동작 구성 요소를 통해 검색 관련 특성을 제어할 수 있습니다. 이 경우 두 개의 범위가 애플리케이션 엔드포인트에 추가됩니다.

<endpointBehaviors>
          <behavior name="endpointBehaviorConfiguration">
            <endpointDiscovery>
              <scopes>
                <add scope="http://www.example.com/calculator"/>
                <add scope="ldap:///ou=engineering,o=examplecom,c=us"/>
              </scopes>
            </endpointDiscovery>

          </behavior>
        </endpointBehaviors>

범위에 대한 자세한 내용은 검색 찾기 및 FindCriteria를 참조하세요.

검색 엔드포인트의 특정 세부 정보를 제어할 수도 있습니다. 이 작업은 StandardEndpointsSection을 통해 수행합니다. 이 샘플에서는 다음 코드 예제와 같이 사용되는 프로토콜 버전을 수정할 뿐 아니라 maxResponseDelay 특성도 추가합니다.

<standardEndpoints>
   <udpDiscoveryEndpoint>
      <standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
   </udpDiscoveryEndpoint>
</standardEndpoints>

다음은 이 예제에 사용되는 전체 구성 파일입니다.

<configuration>
    <system.serviceModel>

      <services>
        <service name="Microsoft.Samples.Discovery.CalculatorService"
                 behaviorConfiguration="calculatorServiceBehavior">
          <endpoint address=""
                    binding="wsHttpBinding"
                    contract="Microsoft.Samples.Discovery.ICalculatorService"
                    behaviorConfiguration="endpointBehaviorConfiguration" />
         <!-- Define the discovery endpoint -->
<endpoint name="udpDiscovery" kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration"/>        </service>
      </services>

      <behaviors>

        <serviceBehaviors>
          <behavior name="calculatorServiceBehavior">

            <!-- Add an announcement endpoint -->
            <serviceDiscovery>
              <announcementEndpoints>
                <endpoint kind="udpAnnouncementEndpoint"/>
              </announcementEndpoints>
            </serviceDiscovery>
          </behavior>
        </serviceBehaviors>

        <endpointBehaviors>
          <behavior name="endpointBehaviorConfiguration">
            <!-- Add scopes used to identify the service -->
            <endpointDiscovery>
              <scopes>
                <add scope="http://www.example.com/calculator"/>
                <add scope="ldap:///ou=engineering,o=examplecom,c=us"/>
              </scopes>
            </endpointDiscovery>

          </behavior>
        </endpointBehaviors>

      </behaviors>

      <standardEndpoints>
        <udpDiscoveryEndpoint>
         <!-- Configure the UDP discovery endpoint -->
          <standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
        </udpDiscoveryEndpoint>
      </standardEndpoints>

    </system.serviceModel>
</configuration>

클라이언트 구성

클라이언트의 애플리케이션 구성 파일에서 standardEndpoint 형식의 dynamicEndpoint는 다음 구성 코드 조각과 같이 검색을 활용하는 데 사용됩니다.

<client>
   <!--  Create an endpoint, make kind="dynamicEndpoint" and use the endpointConfiguration to change settings of DynamicEndpoint -->
   <endpoint name="calculatorEndpoint"
             binding="wsHttpBinding"
             contract="ICalculatorService"
             kind ="dynamicEndpoint"
             endpointConfiguration="dynamicEndpointConfiguration">
   </endpoint>
</client>

클라이언트에서 dynamicEndpoint를 사용하는 경우 런타임에서는 검색을 자동으로 수행합니다. 사용할 검색 엔드포인트의 형식을 지정하는 discoveryClientSettings 섹션에 정의된 설정과 같은 다양한 설정이 검색 중에 사용됩니다.

<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />

서비스를 검색하는 데 사용되는 찾기 조건은 다음과 같습니다.

<!-- Add Scopes, ScopeMatchBy, Extensions and termination criteria in FindCriteria -->
<findCriteria scopeMatchBy="http://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
   <scopes>
      <add scope="http://www.microsoft.com/building42/floor1"/>
   </scopes>
   <!-- These extensions are sent from the client to the service as part of the probe message -->
   <extensions>
      <CustomMetadata>This is custom metadata that is sent to the service along with the client's find request.</CustomMetadata>
   </extensions>
</findCriteria>

이 샘플에서는 이 기능을 확장하고, 클라이언트에서 사용하는 FindCriteria뿐 아니라 검색에 사용되는 표준 updDiscoveryEndpoint의 일부 속성도 수정합니다. 범위, 특정 FindCriteria 알고리즘 및 사용자 지정 종료 조건을 사용하도록 scopeMatchBy를 수정합니다. 또한 이 샘플에서는 클라이언트가 Probe 메시지를 사용하여 XML 요소를 보내는 방법도 보여 줍니다. 마지막으로 다음 구성 파일과 같이 UdpDiscoveryEndpoint에 대해 사용되는 프로토콜 버전 및 UDP 관련 설정 등의 사항을 변경합니다.

<udpDiscoveryEndpoint>
        <!-- Specify the discovery protocol version and UDP transport settings. -->
        <standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11">
          <transportSettings duplicateMessageHistoryLength="2048"
                             maxPendingMessageCount="5"
                             maxReceivedMessageSize="8192"
                             maxBufferPoolSize="262144"/>
        </standardEndpoint>
      </udpDiscoveryEndpoint>

다음은 샘플에 사용되는 전체 클라이언트 구성입니다.

<configuration>
  <system.serviceModel>

    <client>
      <!--  Create an endpoint, make kind="dynamicEndpoint" and use the endpointConfiguration to change settings of DynamicEndpoint -->
      <endpoint name="calculatorEndpoint"
                binding="wsHttpBinding"
                contract="ICalculatorService"
                kind ="dynamicEndpoint"
                endpointConfiguration="dynamicEndpointConfiguration">
      </endpoint>
    </client>

    <standardEndpoints>

      <dynamicEndpoint>
        <standardEndpoint name="dynamicEndpointConfiguration">
          <discoveryClientSettings>
            <!-- Controls where the discovery happens. In this case, Probe message is sent over UdpDiscoveryEndpoint. -->
            <endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />

            <!-- Add Scopes, ScopeMatchBy, Extensions and termination criteria in FindCriteria -->
            <findCriteria scopeMatchBy="http://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
              <scopes>
                <add scope="http://www.microsoft.com/building42/floor1"/>
              </scopes>
              <!-- These extensions are sent from the client to the service as part of the probe message -->
              <extensions>
                <CustomMetadata>This is custom metadata that is sent to the service along with the client's find request.</CustomMetadata>
              </extensions>
            </findCriteria>
          </discoveryClientSettings>
        </standardEndpoint>
      </dynamicEndpoint>

      <udpDiscoveryEndpoint>
        <!-- Specify the discovery protocol version and UDP transport settings. -->
        <standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11">
          <transportSettings duplicateMessageHistoryLength="2048"
                             maxPendingMessageCount="5"
                             maxReceivedMessageSize="8192"
                             maxBufferPoolSize="262144"/>
        </standardEndpoint>
      </udpDiscoveryEndpoint>

    </standardEndpoints>

  </system.serviceModel>
</configuration>

이 샘플을 사용하려면

  1. 이 샘플에서는 HTTP 엔드포인트를 사용하며 이 샘플을 실행하려면 적절한 URL ACL을 추가해야 합니다. 자세한 내용은 HTTP 및 HTTPS 구성을 참조하세요. 높은 권한으로 다음 명령을 실행하면 적절한 ACL이 추가됩니다. 명령이 지정한 대로 작동하지 않는 경우 다음 인수의 도메인과 사용자 이름을 대체할 수 있습니다. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. 솔루션을 빌드합니다.

  3. 빌드 디렉터리에서 서비스 실행 파일을 실행합니다.

  4. 클라이언트 실행 파일을 실행합니다. 클라이언트에서 서비스를 찾을 수 있는지 확인합니다.