Criteria voor aangepast zoeken
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 reageert een service terug op de client als het eindpunt overeenkomt met een van de bereiken die door de client zijn opgegeven.
Demonstreert
Een aangepaste detectieservice maken.
Het implementeren van een aangepast bereikovereenkomst per algoritme.
Discussie
De client zoekt naar 'OR'-typekoppelingscriteria. Een service reageert terug als de bereiken op de eindpunten overeenkomen met een van de bereiken die door de client worden geleverd. In dit geval zoekt de client naar een rekenmachineservice met een van de bereiken in de volgende lijst:
net.tcp://Microsoft.Samples.Discovery/RedmondLocation
net.tcp://Microsoft.Samples.Discovery/SeattleLocation
net.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. Om het aanpassen van aangepaste bereiken te vergemakkelijken, moet de service een aangepaste detectieservice gebruiken die inzicht heeft in de aangepaste bereikovereenkomstregel en de bijbehorende overeenkomende logica implementeert.
Open in het clientproject het bestand Program.cs. ScopeMatchBy
Het 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
AsyncResult
implementatie 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 bereiken op elk van de eindpunten die de service heeft. Als een van de bereiken van het eindpunt overeenkomt met een van de bereiken van de client, voegt de detectieservice 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
CustomDiscoveryExtension
klasse. 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.PublishedEndpoints
is 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 tot slot Program.cs. Houd er rekening mee dat zowel de ServiceDiscoveryBehavior als de host CustomDiscoveryExtension
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.
Maak het project.
Voer de servicetoepassing uit.
Voer de clienttoepassing uit.