Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
CustomFindCriteria-exemplet visar hur du skapar en anpassad omfångsmatchning med hjälp av logik och hur du implementerar en anpassad identifieringstjänst. Klienter använder anpassade omfångsmatchningsfunktioner för att förfina och bygga vidare på de systemspecifika funktionerna i WCF Discovery. Scenariot som det här exemplet omfattar är följande:
En klient letar efter en kalkylatortjänst.
För att förfina sökningen måste klienten använda en matchningsregel för anpassat omfång.
Enligt den här regeln svarar en tjänst tillbaka på klienten om slutpunkten matchar något av de omfång som anges av klienten.
Demonstrerar
Skapa en anpassad upptäcktstjänst.
Implementera en anpassad omfångsmatchning efter algoritm.
Diskussion
Kunden söker efter matchningskriterier av typen "OR". En tjänst svarar tillbaka om omfången på dess slutpunkter matchar något av de omfång som tillhandahålls av klienten. I det här fallet letar klienten efter en kalkylatortjänst som har något av omfången i följande lista:
net.tcp://Microsoft.Samples.Discovery/RedmondLocationnet.tcp://Microsoft.Samples.Discovery/SeattleLocationnet.tcp://Microsoft.Samples.Discovery/PortlandLocation
För att åstadkomma detta dirigerar klienten tjänster att använda en anpassad omfattningsmatchningsregel genom att skicka in en anpassad omfattningsmatchning genom URI. För att underlätta matchning av anpassat omfång måste tjänsten använda en anpassad upptäckstjänst som förstår regeln för matchning av anpassat omfång och implementerar den associerade matchningslogiken.
Öppna filen Program.cs i klientprojektet. Observera att objektets ScopeMatchByFindCriteria fält är inställt på en specifik URI. Den här identifieraren skickas till tjänsten. Om tjänsten inte förstår den här regeln ignoreras klientens sökbegäran.
Öppna tjänstprojektet. Tre filer används för att implementera Custom Discovery Service:
AsyncResult.cs: Det här är implementeringen av
AsyncResult, som krävs av upptäcktsmetoder.CustomDiscoveryService.cs: Den här filen implementerar den anpassade identifieringstjänsten. Implementeringen utökar DiscoveryService klassen och åsidosätter de nödvändiga metoderna. Observera implementeringen av OnBeginFind metoden. Metoden kontrollerar om den anpassade omfångsmatchningen efter regel har angetts av klienten. Det här är samma anpassade URI som klienten angav tidigare. Om den anpassade regeln anges följs den kodsökväg som implementerar logiken för en "eller"-matchning.
Den här anpassade logiken går igenom alla omfång på var och en av de slutpunkter som tjänsten har. Om något av slutpunktens omfång matchar något av de omfång som tillhandahålls av klienten lägger identifieringstjänsten till slutpunkten i svaret som skickas tillbaka till klienten.
CustomDiscoveryExtension.cs: Det sista steget i att implementera identifieringstjänsten är att ansluta den här implementeringen av den anpassade identifieringstjänsten till tjänstvärden. Den hjälpklass som används här är
CustomDiscoveryExtensionklassen . Den här klassen utökar DiscoveryServiceExtension klassen. Användaren måste åsidosätta GetDiscoveryService metoden. I det här fallet returnerar metoden en instans av den anpassade identifieringstjänsten som skapades tidigare.PublishedEndpointsär en ReadOnlyCollection<T> som innehåller alla programslutpunkter som läggs till i ServiceHost. Den anpassade upptäckartjänsten använder detta för att uppdatera sin interna lista. En användare kan också lägga till andra slutpunktsmetadata.
Slutligen öppnar du Program.cs. Observera att både ServiceDiscoveryBehavior och CustomDiscoveryExtension läggs till i värden. När detta är klart och värden har en slutpunkt för att ta emot upptäcktsmeddelanden kan programmet använda den anpassade upptäcktstjänsten.
Observera att klienten kan hitta tjänsten utan att känna till dess adress.
Så här konfigurerar du, skapar och kör exemplet
Öppna lösningen som innehåller projektet.
Skapa projektet.
Kör tjänsteapplikationen.
Kör klientprogrammet.