Vlastní kritérium hledání
Ukázka CustomFindCriteria ukazuje, jak vytvořit vlastní shodu oboru pomocí logiky a jak implementovat vlastní službu zjišťování. Klienti používají vlastní funkce porovnávání oborů ke zpřesnění a dalšímu vytváření funkcí hledání poskytovaného systémem zjišťování WCF. Tento ukázkový scénář popisuje následující:
Klient hledá službu kalkulačky.
Aby bylo možné upřesnit hledání, musí klient použít vlastní pravidlo porovnávání oborů.
Podle tohoto pravidla služba odpoví klientovi, pokud jeho koncový bod odpovídá jakémukoli rozsahu určenému klientem.
Demonstruje
Vytvoření vlastní služby zjišťování
Implementace vlastní shody oboru podle algoritmu
Diskuse
Klient hledá odpovídající kritéria typu OR. Služba odpoví zpět, pokud obory na svých koncových bodech odpovídají jakémukoli rozsahu poskytnutému klientem. V tomto případě klient hledá službu kalkulačky, která má některý z oborů v následujícím seznamu:
net.tcp://Microsoft.Samples.Discovery/RedmondLocation
net.tcp://Microsoft.Samples.Discovery/SeattleLocation
net.tcp://Microsoft.Samples.Discovery/PortlandLocation
Aby toho dosáhl, klient směruje služby tak, aby používaly vlastní pravidlo porovnávání oborů předáním vlastní shody oboru identifikátorem URI. Aby služba usnadnila porovnávání vlastních oborů, musí používat vlastní službu zjišťování, která rozumí pravidlu shody vlastního oboru a implementuje přidruženou odpovídající logiku.
V klientském projektu otevřete soubor Program.cs. Všimněte si, že ScopeMatchBy
pole objektu FindCriteria
je nastaveno na konkrétní identifikátor URI. Tento identifikátor se odešle do služby. Pokud služba toto pravidlo nerozumí, ignoruje požadavek na vyhledání klienta.
Otevřete projekt služby. K implementaci vlastní služby zjišťování se používají tři soubory:
AsyncResult.cs: Jedná se o implementaci
AsyncResult
, kterou vyžadují metody zjišťování.CustomDiscoveryService.cs: Tento soubor implementuje vlastní službu zjišťování. Implementace rozšiřuje DiscoveryService třídu a přepíše nezbytné metody. Poznamenejte si implementaci OnBeginFind metody. Metoda zkontroluje, jestli klient určil, jestli se vlastní obor shoduje s pravidlem. Jedná se o stejný vlastní identifikátor URI, který klient zadal dříve. Pokud je zadáno vlastní pravidlo, následuje cesta kódu, která implementuje logiku shody OR.
Tato vlastní logika prochází všemi obory na všech koncových bodech, které má služba. Pokud některý z oborů koncového bodu odpovídá jakémukoli rozsahu poskytovanému klientem, služba zjišťování tento koncový bod přidá do odpovědi odeslané zpět klientovi.
CustomDiscoveryExtension.cs: Posledním krokem při implementaci služby zjišťování je připojení této implementace vlastní služby zjišťování k hostiteli služby. Pomocná třída použitá zde je
CustomDiscoveryExtension
třída. Tato třída rozšiřuje DiscoveryServiceExtension třídu. Uživatel musí metodu GetDiscoveryService přepsat. V tomto případě metoda vrátí instanci vlastní služby zjišťování, která byla vytvořena dříve.PublishedEndpoints
je aplikace ReadOnlyCollection<T> , která obsahuje všechny koncové body aplikace, které jsou přidány do ServiceHost. Služba vlastního zjišťování tuto službu používá k naplnění interního seznamu. Uživatel může také přidat další metadata koncového bodu.
Nakonec otevřete Program.cs. Všimněte si, že hostiteli ServiceDiscoveryBehavior se přidají i CustomDiscoveryExtension
do hostitele. Jakmile to uděláte a hostitel má koncový bod, přes který se mají přijímat zprávy zjišťování, může aplikace používat vlastní službu zjišťování.
Všimněte si, že klient dokáže službu najít, aniž by věděl její adresu.
Nastavení, sestavení a spuštění ukázky
Otevřete řešení, které obsahuje projekt.
Sestavte projekt.
Spusťte aplikaci služby.
Spusťte klientskou aplikaci.