Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het voorbeeld CustomFindCriteria laat zien hoe u een aangepaste bereikovereenkomst maakt met behulp van logica en hoe u een aangepaste detectieservice implementeert. Clients gebruiken aangepaste functionaliteit voor bereikkoppeling om te verfijnen en verder te bouwen op de door het systeem geleverde zoekfunctionaliteit van WCF Discovery. Het scenario dat in dit voorbeeld wordt behandeld, is als volgt:
Een klant zoekt een rekenmachineservice.
Om de zoekopdracht te verfijnen, moet de client een aangepaste bereikkoppelingsregel gebruiken.
Volgens deze regel antwoordt een service aan de klant als het eindpunt overeenkomt met een van de scopes die door de klant zijn opgegeven.
Demonstreert
Een aangepaste detectieservice maken.
Het implementeren van een aangepaste scope-match met een algoritme.
Discussie
De client zoekt naar 'OR'-typekoppelingscriteria. Een service reageert als de scopes op de eindpunten overeenkomen met een van de scopes die door de cliënt zijn verstrekt. In dit geval zoekt de klant naar een rekenmachineservice met een van de opties in de volgende lijst:
net.tcp://Microsoft.Samples.Discovery/RedmondLocationnet.tcp://Microsoft.Samples.Discovery/SeattleLocationnet.tcp://Microsoft.Samples.Discovery/PortlandLocation
Om dit te bereiken, stuurt de client services om een aangepaste bereikkoppelingsregel te gebruiken door een aangepaste bereikovereenkomst door te geven op basis van URI. De service moet een aangepaste ontdekkingsservice gebruiken om het overeenkomen van aangepaste bereiken te vergemakkelijken. Deze service moet de aangepaste overeenkomingsregels begrijpen en de bijbehorende logica implementeren.
Open in het clientproject het bestand Program.cs. Let op dat het ScopeMatchBy veld van het FindCriteria object is ingesteld op een specifieke URI. Deze id wordt naar de service verzonden. Als de service deze regel niet begrijpt, wordt de zoekaanvraag van de client genegeerd.
Open het serviceproject. Er worden drie bestanden gebruikt om de Custom Discovery Service te implementeren:
AsyncResult.cs: dit is de implementatie van de
AsyncResultimplementatie die is vereist voor detectiemethoden.CustomDiscoveryService.cs: Met dit bestand wordt de aangepaste detectieservice geïmplementeerd. De implementatie breidt de DiscoveryService klasse uit en overschrijft de benodigde methoden. Let op de implementatie van de OnBeginFind methode. De methode controleert of het aangepaste bereik overeenkomt met de regel die is opgegeven door de client. Dit is dezelfde aangepaste URI die de client eerder heeft opgegeven. Als de aangepaste regel is opgegeven, wordt het codepad waarmee de 'OR'-overeenkomstlogica wordt geïmplementeerd, gevolgd.
Deze aangepaste logica doorloopt alle scopes op elk van de eindpunten die de service heeft. Als een van de scopes van het eindpunt overeenkomt met een van de scopes van de client, voegt de ontdekkingsservice dat eindpunt toe aan het antwoord dat naar de client wordt verzonden.
CustomDiscoveryExtension.cs: De laatste stap bij het implementeren van de detectieservice is het verbinden van deze implementatie van de aangepaste detectieservice met de servicehost. De helperklasse die hier wordt gebruikt, is de
CustomDiscoveryExtensionklasse. Deze klasse breidt de DiscoveryServiceExtension klasse uit. De gebruiker moet de GetDiscoveryService methode overschrijven. In dit geval retourneert de methode een exemplaar van de aangepaste detectieservice die eerder is gemaakt.PublishedEndpointsis een ReadOnlyCollection<T> die alle toepassingseindpunten bevat die worden toegevoegd aan de ServiceHost. De aangepaste detectieservice gebruikt deze om de interne lijst te vullen. Een gebruiker kan ook andere eindpuntmetagegevens toevoegen.
Open Program.cs tot slot. Houd er rekening mee dat zowel de ServiceDiscoveryBehavior als de CustomDiscoveryExtension aan de host worden toegevoegd. Zodra dit is gebeurd en de host een eindpunt heeft waarvoor detectieberichten moeten worden ontvangen, kan de toepassing de aangepaste detectieservice gebruiken.
Merk op dat de client de service kan vinden zonder het adres ervan te kennen.
Het voorbeeld instellen, compileren en uitvoeren
Open de oplossing die het project bevat.
Bouw het project.
Voer de servicetoepassing uit.
Voer de clienttoepassing uit.