WCF-objektmodell för identifiering
WCF Discovery består av en uppsättning typer som tillhandahåller en enhetlig programmeringsmodell som gör att du kan skriva tjänster som kan identifieras vid körning och klienter som hittar och använder dessa tjänster.
Göra en tjänst identifierbar och hitta tjänster
Om du vill göra en WCF-tjänst identifierbar lägger du till en ServiceDiscoveryBehavior till ServiceDescription tjänstvärdens värd och lägger till en identifieringsslutpunkt. Om en tjänst har konfigurerats för att skicka meddelanden (genom att lägga till ett AnnouncementEndpoint) skickas meddelandet när tjänstvärden öppnas och stängs.
En klient som vill lyssna efter meddelanden om tjänstmeddelanden är värd för en meddelandetjänst och lägger till en eller flera slutpunkter för meddelanden. Meddelandetjänsten tar emot meddelandemeddelanden och genererar meddelandehändelser.
En klient använder DiscoveryClient klassen för att söka efter tillgängliga tjänster. Klientprogrammet instansierar DiscoveryClient klassen och skickar in en identifieringsslutpunkt som anger var identifieringsmeddelanden ska skickas. Klienten anropar Find metoden som skickar en Probe
begäran. Tjänster som lyssnar efter identifieringsmeddelanden får den här Probe
begäran. Om tjänsten matchar de villkor som anges i Probe
skickar den ett ProbeMatch
meddelande tillbaka till klienten.
Objektmodell
WCF Discovery-API:et definierar följande klasser:
AnnouncementClient
Klassen AnnouncementClient innehåller synkrona och asynkrona metoder för att skicka meddelanden. Det finns två typer av meddelanden, Hello och Bye. Ett Hello-meddelande skickas för att indikera att en tjänst har blivit tillgänglig och ett Bye-meddelande skickas för att indikera att en befintlig tjänst har blivit otillgänglig. Utvecklaren skapar en AnnouncementClient instans som skickar en instans av AnnouncementEndpoint som en konstruktorparameter.
AnnouncementEndpoint
AnnouncementEndpoint representerar en standardslutpunkt med ett fast meddelandekontrakt. Den används av en tjänst eller klient för att skicka och ta emot meddelanden. Som standard AnnouncementEndpoint är klassen inställd på att använda WS_Discovery 11-protokollversionen.
AnnouncementService
AnnouncementService är en systemimplementering av en meddelandetjänst som tar emot och bearbetar meddelandemeddelanden. När ett Hello- eller Bye-meddelande tas emot anropar instansen AnnouncementService lämplig virtuell metod OnBeginOnlineAnnouncement eller OnBeginOfflineAnnouncement, som genererar meddelandehändelser.
DiscoveryClient
Klassen DiscoveryClient används av ett klientprogram för att hitta och lösa tillgängliga tjänster. Den innehåller synkrona och asynkrona metoder för att hitta och matcha tjänster baserat på de angivna FindCriteriaResolveCriteria respektive. Utvecklaren skapar en DiscoveryClient instans och tillhandahåller en instans av DiscoveryEndpoint som en konstruktorparameter.
För att hitta en tjänst anropar utvecklaren den synkrona eller asynkrona Find
metoden, som tillhandahåller en FindCriteria instans som innehåller sökvillkoren som ska användas. DiscoveryClient Skapar ett Probe
meddelande med lämpliga rubriker och skickar sökbegäran. Eftersom det kan finnas fler än en utestående Find
begäran när som helst korrelerar klienten de mottagna svaren och validerar svaret. Den levererar sedan resultatet till anroparen av åtgärden med hjälp av Find
FindResponse.
För att lösa en känd tjänst anropar utvecklaren den synkrona eller asynkrona Resolve
metoden som tillhandahåller en instans av ResolveCriteria som innehåller den EndpointAddress kända tjänsten. Skapar DiscoveryClient meddelandet Resolve
med lämpliga rubriker och skickar matchningsbegäran. Det mottagna svaret korreleras mot utestående matchningsbegäranden och resultatet levereras till anroparen av åtgärden med hjälp ResolveResponseav Resolve
.
Om en identifieringsproxy finns i nätverket och DiscoveryClient skickar identifieringsbegäran på ett multicast-sätt kan identifieringsproxyn svara med multicast-undertryckningsmeddelandet Hello. DiscoveryClient Genererar händelsen när den ProxyAvailable
tar emot Hello-meddelanden som svar på utestående Find
eller Resolve
begäranden. Händelsen ProxyAvailable
innehåller om identifieringsproxyn EndpointDiscoveryMetadata . Det är upp till utvecklaren att använda den här informationen för att växla från Ad hoc till Hanterat läge.
DiscoveryEndpoint
DiscoveryEndpoint representerar en standardslutpunkt med ett fast identifieringskontrakt. Den används av en tjänst eller klient för att skicka eller ta emot identifieringsmeddelanden. Som standard DiscoveryEndpoint är inställt på att använda ServiceDiscoveryMode.Managed läge och WSDiscovery11 WS-Discovery-versionen.
DiscoveryMessageSequenceGenerator
DiscoveryMessageSequenceGenerator används för att generera en DiscoveryMessageSequence när tjänsten skickar identifierings- eller meddelandemeddelanden.
DiscoveryService
Den DiscoveryService abstrakta klassen tillhandahåller ett ramverk för att ta emot och bearbeta Probe
och Resolve
meddelanden. När ett Probe
meddelande tas emot DiscoveryService skapar du en instans av FindRequestContext baserat på det inkommande meddelandet och anropar den OnBeginFind virtuella metoden. När ett Resolve
meddelande tas emot DiscoveryService anropar den OnBeginResolve virtuella metoden. Du kan ärva från den här klassen för att tillhandahålla en anpassad identifieringstjänstimplementering.
DiscoveryProxy
Den DiscoveryProxy abstrakta klassen tillhandahåller ett ramverk för att ta emot och bearbeta identifierings- och meddelandemeddelanden. Du ärver från den här klassen när du implementerar en anpassad identifieringsproxy. När ett Probe
meddelande tas emot via multicast DiscoveryProxy anropar klassen den BeginShouldRedirectFind
virtuella metoden för att avgöra om ett multicast-undertryckningsmeddelande ska skickas. Om utvecklaren bestämmer sig för att inte skicka ett multicast-undertryckningsmeddelande eller om Probe
meddelandet togs emot via unicast skapas en instans av FindRequestContext klassen baserat på det inkommande meddelandet och anropar den OnBeginFind
virtuella metoden. När ett Resolve
meddelande tas emot via multicast DiscoveryProxy anropar klassen den ShouldRedirectResolve
virtuella metoden för att avgöra om ett multicast-undertryckningsmeddelande ska skickas. Om utvecklaren bestämmer sig för att inte skicka ett multicast-undertryckningsmeddelande eller om Resolve
meddelandet togs emot via unicast skapas en instans av ResolveCriteria klassen baserat på det inkommande meddelandet och anropar den OnBeginResolve
virtuella metoden. När ett Hello- eller Bye-meddelande tas emot DiscoveryProxy anropas lämplig virtuell metod (OnBeginOnlineAnnouncement
eller OnBeingOfflineAnnouncement
), som genererar meddelandehändelser.
DiscoveryVersion
Klassen DiscoveryVersion representerar den version av identifieringsprotokollet som ska användas.
EndpointDiscoveryBehavior
Klassen EndpointDiscoveryBehavior används för att styra identifieringen av en slutpunkt, ange tilläggen och ytterligare kontrakttypsnamn. och de omfång som är associerade med slutpunkten. Det här beteendet läggs till i en programslutpunkt för att konfigurera dess EndpointDiscoveryMetadata. När ServiceDiscoveryBehavior läggs till i tjänstvärden kan alla programslutpunkter som värdhanteras av tjänstvärden som standard identifieras. Utvecklaren kan inaktivera identifiering för en specifik slutpunkt genom att ställa in egenskapen på Enabledfalse
.
EndpointDiscoveryMetadata
Klassen EndpointDiscoveryMetadata tillhandahåller en versionsoberoende representation av en slutpunkt som publicerats av tjänsten. Den innehåller slutpunktsadresser, lyssnar-URI:er, kontrakttypnamn, omfång, metadataversion och tillägg som anges av tjänstutvecklaren. Den FindCriteria som skickas av klienten under en Probe
åtgärd matchas mot EndpointDiscoveryMetadata. Om villkoret matchar EndpointDiscoveryMetadata returneras det till klienten. Slutpunktsadressen i ResolveCriteria matchas mot slutpunktsadressen EndpointDiscoveryMetadataför . Om villkoret matchar EndpointDiscoveryMetadata returneras det till klienten.
FindCriteria
Klassen FindCriteria är en versionsoberoende klass som används för att ange de kriterier som används för att hitta en tjänst. Det stöder helt de WS-Discovery-definierade kriterierna för matchande tjänster. Den har också tillägg som utvecklare kan använda för att ange anpassade värden som kan användas under matchningsprocessen. Utvecklaren kan ange avslutningsvillkoren för Find
åtgärden genom att MaxResultsange , som anger det totala antalet tjänster som utvecklaren letar efter eller som anger Duration, vilket är värdet som anger hur länge klienten väntar på svar.
FindRequestContext
Klassen FindRequestContext instansieras av identifieringstjänsten baserat på meddelandet den Probe
tar emot när en klient initierar en Find
åtgärd. Den innehåller en instans av FindCriteria som har angetts av klienten.
FindResponse
Klassen FindResponse returneras till anroparen av Find med svaren från åtgärden Find
. Den finns också i FindCompletedEventArgs. Den innehåller en samling av EndpointDiscoveryMetadata, som är samlingen av identifierade slutpunkter och en ordlista med EndpointDiscoveryMetadata och DiscoveryMessageSequence.
ResolveCriteria
Klassen ResolveCriteria är en versionsoberoende klass som används för att ange de kriterier som används vid matchning av en redan känd tjänst. Den innehåller slutpunktsadressen för den kända tjänsten. Utvecklaren kan ange avslutningsvillkoren för åtgärden lös genom att Durationange , som anger hur länge klienten väntar på svar.
ResolveResponse
ResolveResponse Returneras till anroparen för Resolve metoden med svaret för Resolve
åtgärden. Den finns också i ResolveCompletedEventArgs. Den innehåller en instans av EndpointDiscoveryMetadata, som är de identifierade slutpunkterna och en instans av DiscoveryMessageSequence.
ServiceDiscoveryBehavior
Med ServiceDiscoveryBehavior klassen kan utvecklaren lägga till identifieringsfunktionen i en tjänst. Du lägger till det här beteendet i ServiceHost. Klassen ServiceDiscoveryBehavior itererar över de programslutpunkter som läggs till i tjänstvärden och skapar en samling EndpointDiscoveryMetadata från de identifieringsbara slutpunkterna. Alla slutpunkter kan identifieras som standard. Identifieringen av en viss slutpunkt kan styras genom att lägga till till den EndpointDiscoveryBehavior specifika slutpunkten. Om meddelandeslutpunkter läggs till ServiceDiscoveryBehavior skickas meddelandet om alla identifieringsbara slutpunkter över var och en av slutpunkterna för meddelanden när tjänstvärden öppnas eller stängs.
UdpAnnouncementEndpoint
Klassen UdpAnnouncementEndpoint är en standardslutpunkt för meddelande som är förkonfigurerad för tillkännagivande över en UDP multicast-bindning. Som standard UdpAnnouncementEndpoint är inställt på att använda WSApril2005 WS_Discovery version.
UdpDiscoveryEndpoint
Klassen UdpDiscoveryEndpoint är en standardidentifieringsslutpunkt som är förkonfigurerad för identifiering över en UDP multicast-bindning. Som standard DiscoveryEndpoint är inställt på att använda WSDiscovery11 WS-Discovery-versionen och ServiceDiscoveryMode.Adhoc -läget.