다음을 통해 공유


WCF 검색 개체 모델

WCF 검색은 런타임에 검색할 수 있는 서비스와 이러한 서비스를 찾아서 사용하는 클라이언트를 작성할 수 있는 통합 프로그래밍 모델을 제공하는 형식 집합으로 구성됩니다.

서비스를 검색할 수 있게 하고 서비스 찾기

WCF 서비스를 검색할 수 있도록 하려면 서비스 호스트에 ServiceDiscoveryBehaviorServiceDescription에 추가하고 검색 끝점을 추가합니다. 서비스가 알림 메시지를 보내도록 구성된 경우(추가 AnnouncementEndpoint) 서비스 호스트를 열고 닫을 때 알림이 전송됩니다.

서비스 알림 메시지를 수신 대기하려는 클라이언트는 알림 서비스를 호스트하고 하나 이상의 알림 엔드포인트를 추가합니다. 알림 서비스는 알림 메시지를 수신하고 알림 이벤트를 호출합니다.

클라이언트는 클래스를 DiscoveryClient 사용하여 사용 가능한 서비스를 검색합니다. 클라이언트 애플리케이션은 검색 메시지를 보낼 위치를 지정하는 검색 엔드포인트를 전달하여 클래스를 인스턴스화 DiscoveryClient 합니다. 클라이언트는 Find 메서드를 호출하여 Probe 요청을 보냅니다. 검색 메시지를 수신 대기하는 서비스는 이 Probe 요청을 받습니다. 서비스가 지정된 Probe조건과 일치하면 클라이언트에 ProbeMatch 메시지를 다시 보냅니다.

개체 모델

WCF 검색 API는 다음 클래스를 정의합니다.

AnnouncementClient

이 클래스는 AnnouncementClient 알림 메시지를 보내기 위한 동기 및 비동기 메서드를 제공합니다. 알림 메시지에는 Hello와 Bye의 두 가지 유형이 있습니다. Hello 메시지는 서비스가 사용 가능해졌음을 나타내며, Bye 메시지는 기존 서비스가 사용 불가능해졌음을 나타냅니다. 개발자는 인스턴스를 AnnouncementClient 만들어 생성자 매개 변수로 인스턴스 AnnouncementEndpoint 를 전달합니다.

공지 엔드포인트

AnnouncementEndpoint 는 고정 공지 계약이 있는 표준 엔드포인트를 나타냅니다. 서비스 또는 클라이언트에서 알림 메시지를 보내고 받는 데 사용됩니다. 기본적으로 AnnouncementEndpoint 클래스는 WS_Discovery 11 프로토콜 버전을 사용하도록 설정됩니다.

공지 서비스

AnnouncementService 는 알림 메시지를 수신하고 처리하는 알림 서비스의 시스템 제공 구현입니다. Hello 또는 Bye 메시지가 수신되면 AnnouncementService 인스턴스는 적절한 가상 메서드 OnBeginOnlineAnnouncement 또는 OnBeginOfflineAnnouncement알림 이벤트를 발생시키는 호출합니다.

DiscoveryClient

DiscoveryClient 클래스는 클라이언트 애플리케이션에서 사용 가능한 서비스를 찾고 확인하는 데 사용됩니다. 서비스 찾기 및 확인을 위한 동기적 FindCriteria 방법과 비동기적 ResolveCriteria 방법을 제공합니다. 개발자는 인스턴스를 DiscoveryClient 만들고 생성자 매개 변수로 인스턴스 DiscoveryEndpoint 를 제공합니다.

서비스를 찾기 위해 개발자는 사용할 검색 조건이 포함된 인스턴스를 제공하는 Find 동기 또는 비동 FindCriteria 기 메서드를 호출합니다. 적절한 DiscoveryClient 헤더를 사용하여 Probe 메시지를 만들고 찾기 요청을 보냅니다. 언제든지 둘 이상의 미해결 Find 요청이 있을 수 있으므로 클라이언트는 수신된 응답의 상관 관계를 지정하고 응답의 유효성을 검사합니다. 그런 다음 Find 결과를 FindResponse을 사용하여 Find 작업의 호출자에게 전달합니다.

알려진 서비스를 해결하기 위해 개발자는 동기 또는 비동기 Resolve 메서드를 호출하여 알려진 서비스의 ResolveCriteria를 포함하는 EndpointAddress의 인스턴스를 제공합니다. DiscoveryClient는 적절한 헤더와 함께 Resolve 메시지를 생성하고 해결 요청을 보냅니다. 수신된 응답은 미해결 해결 요청과 비교하여 상관 관계를 확인하고 결과가 Resolve를 사용하여 ResolveResponse 작업의 호출자에게 전달됩니다.

검색 프록시가 네트워크에 있고 DiscoveryClient가 검색 요청을 멀티캐스트 방식으로 보내는 경우 검색 프록시는 멀티캐스트 억제 Hello 메시지로 응답할 수 있습니다. DiscoveryClient는 미 ProxyAvailable 결 또는 Find 요청에 대한 응답으로 Hello 메시지를 받을 때 Resolve 이벤트를 발생시킵니다. ProxyAvailable 이벤트는 검색 프록시에 관한 EndpointDiscoveryMetadata 정보를 포함합니다. 개발자는 이 정보를 사용하여 임시 모드에서 관리 모드로 전환해야 합니다.

DiscoveryEndpoint

DiscoveryEndpoint 는 고정 검색 계약이 있는 표준 엔드포인트를 나타냅니다. 서비스 또는 클라이언트에서 검색 메시지를 보내거나 받는 데 사용됩니다. 기본적으로 DiscoveryEndpoint 모드 및 WSDiscovery11 WS-Discovery 버전을 사용하도록 ServiceDiscoveryMode.Managed 설정됩니다.

DiscoveryMessageSequenceGenerator

DiscoveryMessageSequenceGenerator는 서비스에서 검색 또는 알림 메시지를 보낼 때 DiscoveryMessageSequence을 생성하는 데 사용됩니다.

DiscoveryService

추상 클래스는 DiscoveryService 메시지 수신 및 처리 ProbeResolve 에 대한 프레임워크를 제공합니다. Probe 메시지가 수신되면 DiscoveryService 들어오는 메시지를 기반으로 인스턴스 FindRequestContext 를 만들고 가상 메서드를 OnBeginFind 호출합니다. Resolve 메시지가 수신되면 DiscoveryService 가상 메서드를 OnBeginResolve 호출합니다. 이 클래스에서 상속하여 사용자 지정 검색 서비스 구현을 제공할 수 있습니다.

DiscoveryProxy

추상 클래스는 DiscoveryProxy 검색 및 알림 메시지를 수신하고 처리하기 위한 프레임워크를 제공합니다. 사용자 지정 검색 프록시를 구현할 때 이 클래스에서 상속합니다. 멀티캐스트로 Probe 메시지를 받으면 DiscoveryProxy 클래스는 BeginShouldRedirectFind 가상 메서드를 호출하여 멀티캐스트 억제 메시지를 보내야 하는지 여부를 결정합니다. 개발자가 멀티캐스트 표시 안 함 메시지를 보내지 않거나 유니캐스트를 통해 메시지를 받은 경우 Probe 들어오는 메시지를 기반으로 클래스의 FindRequestContext 인스턴스를 만들고 가상 메서드를 OnBeginFind 호출합니다. 멀티캐스트를 통해 Resolve 메시지를 받으면 DiscoveryProxy 클래스가 ShouldRedirectResolve 가상 메서드를 호출하여 멀티캐스트 억제 메시지를 보내야 하는지 여부를 결정합니다. 개발자가 멀티캐스트 표시 안 함 메시지를 보내지 않거나 유니캐스트를 통해 메시지를 받은 경우 Resolve 들어오는 메시지를 기반으로 클래스의 ResolveCriteria 인스턴스를 만들고 가상 메서드를 OnBeginResolve 호출합니다. Hello 또는 Bye 메시지가 수신되면 DiscoveryProxy 알림 이벤트를 발생시키는 적절한 가상 메서드(OnBeginOnlineAnnouncement 또는 OnBeingOfflineAnnouncement)를 호출합니다.

DiscoveryVersion

클래스는 DiscoveryVersion 사용할 검색 프로토콜 버전을 나타냅니다.

엔드포인트 디스커버리 동작

클래스는 EndpointDiscoveryBehavior 엔드포인트의 검색 가능성을 제어하고 확장명, 추가 계약 유형 이름을 지정하는 데 사용됩니다. 및 해당 엔드포인트와 연결된 범위입니다. 이 동작은 애플리케이션 엔드포인트에 추가되어 해당 엔드포인트의 EndpointDiscoveryMetadata를 구성합니다. ServiceDiscoveryBehavior 서비스 호스트에 추가되면 기본적으로 서비스 호스트에서 호스트하는 모든 애플리케이션 엔드포인트를 검색할 수 있습니다. 개발자는 특정 엔드포인트에 대한 발견 기능을 Enabled 속성을 false로 설정하여 해제할 수 있습니다.

엔드포인트 디스커버리 메타데이터

클래스는 EndpointDiscoveryMetadata 서비스에서 게시한 엔드포인트의 버전 독립적 표현을 제공합니다. 여기에는 엔드포인트 주소, 수신 대기 URI, 계약 유형 이름, 범위, 메타데이터 버전 및 서비스 개발자가 지정한 확장이 포함됩니다. 클라이언트가 FindCriteria 작업 중에 보낸 ProbeEndpointDiscoveryMetadata와 일치합니다. 조건이 일치 EndpointDiscoveryMetadata 하면 클라이언트에 반환됩니다. 엔드포인트 주소 ResolveCriteriaEndpointDiscoveryMetadata의 엔드포인트 주소와 일치합니다. 조건이 일치 EndpointDiscoveryMetadata 하면 클라이언트에 반환됩니다.

검색 기준

클래스 FindCriteria 는 서비스를 찾을 때 사용되는 조건을 지정하는 데 사용되는 버전 독립적 클래스입니다. 일치하는 서비스에 대한 WS-Discovery 정의 조건을 완벽하게 지원합니다. 또한 개발자가 일치 프로세스 중에 사용할 수 있는 사용자 지정 값을 지정하는 데 사용할 수 있는 확장이 있습니다. 개발자는 Find을 지정하여 MaxResults 작업의 종료 기준을 제공할 수 있습니다. 이때 개발자가 찾고 있는 총 서비스 수를 지정하거나 Duration을 지정하여 클라이언트가 응답을 기다리는 시간을 정의할 수 있습니다.

요청컨텍스트찾기

클라이언트가 FindRequestContext 작업을 시작하면 수신되는 Probe 메시지에 따라 Find 클래스는 검색 서비스에 의해 인스턴스화됩니다. 클라이언트에서 지정한 인스턴스 FindCriteria 를 포함합니다.

FindResponse

FindResponse 클래스는 Find 작업의 응답과 함께 Find 호출자에게 반환됩니다. FindCompletedEventArgs에도 있습니다. 검색된 엔드포인트의 EndpointDiscoveryMetadata 컬렉션과 EndpointDiscoveryMetadataDiscoveryMessageSequence의 사전을 포함합니다.

해결 기준

클래스 ResolveCriteria 는 이미 알려진 서비스를 확인할 때 사용되는 조건을 지정하는 데 사용되는 버전 독립적 클래스입니다. 알려진 서비스의 엔드포인트 주소를 포함합니다. 개발자는 클라이언트가 응답을 기다리는 시간을 지정하는 Duration확인 작업에 대한 종료 조건을 제공할 수 있습니다.

리졸브리스폰스

ResolveResponseResolve 작업의 응답과 함께 Resolve 메서드 호출자에게 반환됩니다. ResolveCompletedEventArgs에도 있습니다. EndpointDiscoveryMetadata의 인스턴스와 DiscoveryMessageSequence의 인스턴스를 포함하고 있는 검색된 엔드포인트입니다.

서비스 발견 동작

ServiceDiscoveryBehavior 클래스를 사용하면 개발자가 검색 기능을 서비스에 추가할 수 있습니다. 이 동작을 ServiceHost에 추가하세요. ServiceDiscoveryBehavior 클래스는 서비스 호스트에 추가된 애플리케이션 엔드포인트를 반복하고 탐색 가능한 엔드포인트에서 EndpointDiscoveryMetadata 컬렉션을 만듭니다. 모든 엔드포인트는 기본적으로 검색할 수 있습니다. 특정 엔드포인트에 EndpointDiscoveryBehavior를 추가하여 해당 엔드포인트의 검색 가능성을 제어할 수 있습니다. 알림 엔드포인트가 추가 ServiceDiscoveryBehavior 되면 서비스 호스트를 열거나 닫을 때 검색 가능한 모든 엔드포인트의 알림이 각 알림 엔드포인트를 통해 전송됩니다.

UdpAnnouncementEndpoint

클래스는 UdpAnnouncementEndpoint UDP 멀티캐스트 바인딩을 통해 공지하도록 미리 구성된 표준 알림 엔드포인트입니다. 기본적으로 UdpAnnouncementEndpoint WSApril2005 WS_Discovery 버전을 사용하도록 설정됩니다.

UdpDiscoveryEndpoint

클래스는 UdpDiscoveryEndpoint UDP 멀티캐스트 바인딩을 통해 검색하도록 미리 구성된 표준 검색 엔드포인트입니다. 기본적으로 DiscoveryEndpoint WSDiscovery11 WS-Discovery 버전 및 ServiceDiscoveryMode.Adhoc 모드를 사용하도록 설정됩니다.