WCF Discovery 개체 모델
WCF Discovery는 런타임에 검색 가능한 서비스와 이러한 서비스를 찾아서 사용하는 클라이언트를 작성할 수 있는 통합된 프로그래밍 모델을 제공하는 일련의 형식으로 구성되어 있습니다.
서비스를 검색 가능하게 만들고 서비스 찾기
WCF 서비스를 검색 가능하게 만들려면 서비스 호스트의 ServiceDescription에 ServiceDiscoveryBehavior를 추가하고 검색 끝점을 추가합니다. AnnouncementEndpoint를 추가하여 알림 메시지를 보내도록 서비스를 구성한 경우 서비스 호스트가 열리고 닫힐 때 알림이 보내집니다.
서비스 알림 메시지를 수신 대기할 클라이언트는 알림 서비스를 호스팅하고 하나 이상의 알림 끝점을 추가합니다. 알림 서비스는 알림 메시지를 받고 알림 이벤트를 발생시킵니다.
클라이언트는 DiscoveryClient 클래스를 사용하여 사용 가능한 서비스를 검색합니다. 클라이언트 응용 프로그램은 DiscoveryClient 클래스를 인스턴스화하여 검색 메시지를 보낼 위치를 지정하는 검색 끝점을 제공합니다. 클라이언트가 Find 메서드를 호출하여 Probe 요청을 보내면 검색 메시지를 수신 대기하는 서비스가 이 Probe 요청을 받습니다. 이 서비스는 Probe에 지정된 조건과 일치할 경우 클라이언트에 ProbeMatch 메시지를 다시 보냅니다.
개체 모델
WCF Discovery API는 다음과 같은 클래스를 정의합니다.
AnnouncementEndpoint
DiscoveryClient
ServiceDiscoveryBehavior
AnnouncementClient
AnnouncementClient 클래스는 알림 메시지를 보내기 위한 동기 및 비동기 메서드를 제공합니다. 알림 메시지에는 Hello와 Bye라는 두 가지 유형이 있습니다. Hello 메시지는 서비스가 사용 가능하게 되었음을 알리는 데 사용되고 Bye 메시지는 기존 서비스가 사용 가능하지 않게 되었음을 알리는 데 사용됩니다. 개발자는 AnnouncementClient 인스턴스를 만들어 AnnouncementEndpoint의 인스턴스를 생성자 매개 변수로 제공합니다.
AnnouncementEndpoint
AnnouncementEndpoint는 고정 알림 계약이 있는 표준 끝점을 나타냅니다. 이 표준 끝점은 서비스나 클라이언트에서 알림 메시지를 보내고 받는 데 사용됩니다. 기본적으로 AnnouncementEndpoint 클래스는 WS_Discovery 11 프로토콜 버전을 사용하도록 설정됩니다.
AnnouncementService
AnnouncementService는 알림 메시지를 받고 처리하는 알림 서비스의 시스템 제공 구현입니다. Hello 또는 Bye 메시지가 수신되면 AnnouncementService 인스턴스는 해당 가상 메서드인 OnBeginOnlineAnnouncement 또는 OnBeginOfflineAnnouncement를 호출하여 알림 이벤트를 발생시킵니다.
DiscoveryClient
DiscoveryClient 클래스는 클라이언트 응용 프로그램에서 사용 가능한 서비스를 찾고 확인하는 데 사용됩니다. 이 클래스는 지정된 FindCriteria 및 ResolveCriteria를 각각 기반으로 하여 서비스를 찾고 확인하기 위한 동기 및 비동기 메서드를 제공합니다. 개발자는 DiscoveryClient 인스턴스를 만들어 DiscoveryEndpoint의 인스턴스를 생성자 매개 변수로 제공합니다.
개발자는 사용할 검색 조건이 들어 있는 FindCriteria 인스턴스를 제공하는 동기 또는 비동기 Find 메서드를 호출하여 서비스를 찾습니다. DiscoveryClient는 해당 헤더가 포함된 Probe 메시지를 만들고 찾기 요청을 보냅니다. 처리되지 않은 Find 요청은 언제든지 둘 이상 있을 수 있으므로 클라이언트는 수신된 응답을 상호 연결하고 이러한 응답의 유효성을 검사한 다음 FindResponse를 사용하여 Find 작업의 호출자에게 결과를 전달합니다.
개발자는 알려진 서비스의 EndpointAddress가 들어 있는 ResolveCriteria의 인스턴스를 제공하는 동기 또는 비동기 Resolve 메서드를 호출하여 알려진 서비스를 확인합니다. DiscoveryClient는 해당 헤더가 포함된 Resolve 메시지를 만들고 확인 요청을 보냅니다. 그러면 수신된 응답이 처리되지 않은 확인 요청과 상호 연결되고 ResolveResponse를 사용하여 결과가 Resolve 작업의 호출자에게 전달됩니다.
검색 프록시가 네트워크에 있는 경우 DiscoveryClient가 검색 요청을 멀티캐스트 방식으로 보내면 검색 프록시가 멀티캐스트 비표시 오류(Suppression) Hello 메시지로 응답할 수 있습니다. DiscoveryClient는 처리되지 않은 Find 또는 Resolve 요청에 대한 응답으로 Hello 메시지를 받으면 ProxyAvailable 이벤트를 발생시킵니다. ProxyAvailable 이벤트에는 검색 프록시에 대한 EndpointDiscoveryMetadata가 포함되어 있습니다. 이 정보를 사용하여 애드혹 모드에서 관리 모드로 전환하는 것은 개발자에게 달려 있습니다.
DiscoveryEndpoint
DiscoveryEndpoint는 고정 검색 계약이 있는 표준 끝점을 나타냅니다. 이 표준 끝점은 서비스나 클라이언트에서 검색 메시지를 보내거나 받는 데 사용됩니다. 기본적으로 DiscoveryEndpoint는 Managed 모드와 WSDiscovery11 WS-Discovery 버전을 사용하도록 설정됩니다.
DiscoveryMessageSequenceGenerator
DiscoveryMessageSequenceGenerator는 서비스에서 검색 또는 알림 메시지를 보낼 때 DiscoveryMessageSequence를 생성하는 데 사용됩니다.
DiscoveryService
DiscoveryService 추상 클래스는 Probe 및 Resolve 메시지를 받고 처리하기 위한 프레임워크를 제공합니다. Probe 메시지가 수신되면 DiscoveryService는 들어오는 메시지를 기반으로 FindRequestContext의 인스턴스를 만들고 OnBeginFind 가상 메서드를 호출합니다. Resolve 메서드가 수신되면 DiscoveryService는 OnBeginResolve 가상 메서드를 호출합니다. 사용자 지정 검색 서비스 구현을 제공하려면 이 클래스에서 상속할 수 있습니다.
DiscoveryProxy
DiscoveryProxy 추상 클래스는 검색 및 알림 메시지를 받고 처리하기 위한 프레임워크를 제공합니다. 사용자 지정 검색 프록시를 구현하는 경우 이 클래스에서 상속합니다. Probe 메시지가 멀티캐스트를 통해 수신되면 DiscoveryProxy 클래스는 BeginShouldRedirectFind 가상 메서드를 호출하여 멀티캐스트 비표시 오류(Suppression) 메시지를 보내야 하는지 여부를 결정합니다. 개발자가 멀티캐스트 비표시 오류(Suppression) 메시지를 보내지 않도록 결정하거나 Probe 메시지가 유니캐스트를 통해 수신되는 경우 이 클래스는 들어오는 메시지를 기반으로 FindRequestContext 클래스의 인스턴스를 만들고 OnBeginFind 가상 메서드를 호출합니다. Resolve 메시지가 멀티캐스트를 통해 수신되면 DiscoveryProxy 클래스는 ShouldRedirectResolve 가상 메서드를 호출하여 멀티캐스트 비표시 오류(Suppression) 메시지를 보내야 하는지 여부를 결정합니다. 개발자가 멀티캐스트 비표시 오류(Suppression) 메시지를 보내지 않도록 결정하거나 Resolve 메시지가 유니캐스트를 통해 수신되는 경우 이 클래스는 들어오는 메시지를 기반으로 ResolveCriteria 클래스의 인스턴스를 만들고 OnBeginResolve 가상 메서드를 호출합니다. Hello 또는 Bye 메시지가 수신되면 DiscoveryProxy는 알림 이벤트를 발생시키는 해당 가상 메서드(OnBeginOnlineAnnouncement 또는 OnBeingOfflineAnnouncement)를 호출합니다.
DiscoveryVersion
DiscoveryVersion 클래스는 사용할 검색 프로토콜 버전을 나타냅니다.
EndpointDiscoveryBehavior
EndpointDiscoveryBehavior 클래스는 끝점의 검색 기능을 제어하고 확장, 추가 계약 형식 이름 및 해당 끝점과 연결된 범위를 지정하는 데 사용됩니다. 이 동작은 EndpointDiscoveryMetadata를 구성하기 위해 응용 프로그램 끝점에 추가됩니다. ServiceDiscoveryBehavior가 서비스 호스트에 추가되면 서비스 호스트에 의해 기본적으로 호스팅되는 모든 응용 프로그램 끝점이 검색 가능하게 됩니다. 개발자는 Enable 속성을 false로 설정하여 특정 끝점에 대한 검색을 해제할 수 있습니다.
EndpointDiscoveryMetadata
EndpointDiscoveryMetadata 클래스는 서비스가 게시한 끝점을 버전에 관계없이 나타냅니다. 이 클래스에는 서비스 개발자가 지정한 끝점 주소, 수신 대기 URI, 계약 형식 이름, 범위, 메타데이터 버전 및 확장이 포함되어 있습니다. Probe 작업 중에 클라이언트가 보낸 FindCriteria는 EndpointDiscoveryMetadata와 일치하는지 비교됩니다. 조건이 일치하면 EndpointDiscoveryMetadata가 클라이언트에 반환됩니다. ResolveCriteria의 끝점 주소는 EndpointDiscoveryMetadata의 끝점 주소와 일치하는지 비교됩니다. 조건이 일치하면 EndpointDiscoveryMetadata가 클라이언트에 반환됩니다.
FindCriteria
FindCriteria 클래스는 서비스를 찾을 때 사용되는 조건을 지정하는 데 사용되는 버전에 관계없는 클래스로, 일치하는 서비스에 대한 WS-Discovery 정의 조건을 완전히 지원하며 개발자가 일치 작업 중에 사용할 수 있는 사용자 지정 값을 지정하기 위해 사용할 수 있는 확장도 포함하고 있습니다. 개발자는 MaxResult를 지정하여 Find 작업에 대한 종료 조건을 제공할 수 있습니다. 이 클래스는 개발자가 검색할 최대 서비스 수를 지정하거나 클라이언트가 응답을 기다리는 기간을 지정하는 값인 Duration을 지정합니다.
FindRequestContext
FindRequestContext 클래스는 클라이언트가 Find 작업을 시작할 때 수신되는 Probe 메시지를 기반으로 검색 서비스에 의해 인스턴스화됩니다. 이 클래스에는 클라이언트가 지정한 FindCriteria의 인스턴스가 포함되어 있습니다.
FindResponse
FindResponse 클래스는 Find 작업의 응답과 함께 Find의 호출자에게 반환됩니다. 이 클래스는 FindCompletedEventArgs에도 제공됩니다. 이 클래스에는 검색된 끝점과 EndpointDiscoveryMetadata 및 DiscoveryMessageSequence 사전의 컬렉션인 EndpointDiscoveryMetadata의 컬렉션이 포함되어 있습니다.
ResolveCriteria
ResolveCriteria 클래스는 이미 알려진 서비스를 확인할 때 사용되는 조건을 지정하는 데 사용되는 버전에 관계없는 클래스입니다. 이 클래스에는 알려진 서비스의 끝점 주소가 포함되어 있습니다. 개발자는 Duration을 지정하여 확인 작업에 대한 종료 조건을 제공할 수 있습니다. 이 클래스는 클라이언트가 응답을 기다리는 기간을 지정합니다.
ResolveResponse
ResolveResponse는 Resolve 작업의 응답과 함께 Resolve 메서드의 호출자에게 반환됩니다. 이 클래스는 ResolveCompletedEventArgs에도 제공됩니다. 이 클래스에는 검색된 끝점인 EndpointDiscoveryMetadata의 인스턴스와 DiscoveryMessageSequence의 인스턴스가 포함되어 있습니다.
ServiceDiscoveryBehavior
ServiceDiscoveryBehavior 클래스는 개발자가 검색 기능을 서비스에 추가하는 데 사용됩니다. 이 동작은 ServiceHost에 추가됩니다. ServiceDiscoveryBehavior 클래스는 서비스 호스트에 추가된 응용 프로그램 끝점에 대해 반복되고 검색 가능한 끝점에서 EndpointDiscoveryMetadata의 컬렉션을 만듭니다. 모든 끝점은 기본적으로 검색 가능합니다. 원하는 끝점에 EndpointDiscoveryBehavior를 추가하면 해당 끝점의 검색 기능을 제어할 수 있습니다. ServiceDiscoveryBehavior에 알림 끝점을 추가하면 서비스 호스트가 열리거나 닫힐 때 검색 가능한 모든 끝점의 알림이 각 알림 끝점을 통해 보내집니다.
ServiceDiscoveryExtension
ServiceDiscoveryExtension 클래스는 ServiceDiscoveryBehavior 클래스에 의해 만들어집니다. 검색 가능하게 만든 끝점은 ServiceDiscoveryExtension에서 가져올 수 있습니다. 이 클래스는 사용자 지정 검색 서비스 구현을 지정하는 데도 사용됩니다.
UdpAnnouncementEndpoint
UdpAnnouncementEndpoint 클래스는 UDP 멀티캐스트 바인딩을 통한 알림에 대해 미리 구성된 표준 알림 끝점입니다. 기본적으로 UdpAnnouncementEndpoint는 WSApril2005 WS_Discovery 버전을 사용하도록 설정됩니다.
UdpDiscoveryEndpoint
UdpDiscoveryEndpoint 클래스는 UDP 멀티캐스트 바인딩을 통한 검색에 대해 미리 구성된 표준 검색 끝점입니다. 기본적으로 DiscoveryEndpoint는 WSDiscovery11 WS-Discovery 버전과 Adhoc 모드를 사용하도록 설정됩니다.