Sdílet prostřednictvím


Filtrování

Systém filtrování wcf (Windows Communication Foundation) může používat deklarativní filtry ke shodě zpráv a provádění provozních rozhodnutí. Filtry můžete použít k určení toho, co dělat se zprávou, prozkoumáním části zprávy. Proces řazení do fronty může například pomocí dotazu XPath 1.0 zkontrolovat prvek priority známé hlavičky a určit, zda se má zpráva přesunout do fronty.

Systém filtrování se skládá ze sady tříd, které mohou efektivně určit, která sada filtrů je true určena pro konkrétní zprávu WCF.

Systém filtrování je základní součástí zasílání zpráv WCF; je navržen tak, aby byl extrémně rychlý. Každá implementace filtru byla optimalizována pro určitý druh porovnávání se zprávami WCF.

Systém filtrování není bezpečný pro přístup z více vláken. Aplikace musí zpracovávat všechny sémantiky uzamčení. Podporuje ale vícečísměrný jeden zapisovač.

Where Filtering Fits

Filtrování se provádí po přijetí zprávy a je součástí procesu odeslání zprávy do správné součásti aplikace. Návrh systému filtrování řeší požadavky několika subsystémů WCF, včetně zasílání zpráv, směrování, zabezpečení, zpracování událostí a správy systému.

Filtry

Modul filtrů má dvě primární komponenty, filtry a tabulky filtrů. Filtr provádí logická rozhodnutí o zprávě na základě uživatelem zadaných logických podmínek. Filtry implementují MessageFilter třídu.

Metody Match se používají k určení, zda zpráva splňuje filtr. Jedna z metod testuje hlavičku zprávy, ale nemůže zkontrolovat text zprávy. Druhá metoda přebírá vyrovnávací paměť zprávy jako vstupní parametr a může zkontrolovat tělo zprávy.

Filtry nejsou obvykle testovány jednotlivě, ale jako součást tabulky filtrů, což je obecná třída, kterou CreateFilterTable metoda vytvoří.

Několik druhů filtrů se specializuje na porovnávání konkrétního druhu logické podmínky. Jakmile vytvoříte filtr, nemůžete změnit kritéria, která filtr používá; pokud chcete upravit kritéria filtru, vytvořte nový a odstraňte existující filtr.

Filtry akcí

Obsahuje ActionMessageFilter seznam řetězců akcí. Pokud některá z akcí v seznamu filtru odpovídá záhlaví akce ve zprávě nebo vyrovnávací paměti zprávy, Match metoda vrátí true. Pokud je seznam prázdný, filtr se považuje za filtr odpovídající všem a všechny zprávy nebo vyrovnávací paměti zprávy a Match vrátí .true Pokud žádná z akcí v seznamu filtru neodpovídá záhlaví akce ve zprávě nebo vyrovnávací paměti zprávy, Match vrátí .false Pokud zpráva neobsahuje žádnou akci a seznam filtru není prázdný, Match vrátí hodnotu false.

Filtry adres koncového bodu

Filtruje EndpointAddressMessageFilter zprávy a vyrovnávací paměti zpráv na základě adresy koncového bodu, jak je znázorněno v jejich kolekci hlaviček. Aby zpráva předala takový filtr, musí být splněny následující podmínky:

  • Identifikátor URI (Uniform Resource Identifier) filtru musí být stejný jako adresa v záhlaví Zprávy.

  • Každý parametr koncového bodu v adrese filtru (address.Headers kolekce) musí najít záhlaví zprávy, na které se má namapovat. Další hlavičky v vyrovnávací paměti zprávy nebo zprávy jsou přijatelné pro zachování trueshody .

Filtry adres koncového bodu předpony

  1. Funkce PrefixEndpointAddressMessageFilter stejně jako EndpointAddressMessageFilter filtr s tím rozdílem, že shoda může být na předponě identifikátoru URI zprávy. Například filtr určující adresu http://www.adatum.com odpovídá zprávou adresovanou http://www.adatum.com/userA.

Filtry zpráv XPath

Výraz XPathMessageFilter XPath slouží k určení, zda dokument XML obsahuje specifické prvky, atributy, text nebo jiné syntaktické konstrukty XML. Filtr je optimalizovaný tak, aby byl velmi efektivní pro striktní podmnožinu XPath. Jazyk cesty XML je popsán ve specifikaci W3C XML Path Language 1.0.

Aplikace obvykle používá XPathMessageFilter v koncovém bodu dotaz na obsah zprávy SOAP a pak provede příslušnou akci na základě výsledků tohoto dotazu. Proces řazení do fronty může například použít dotaz XPath ke kontrole prvku priority známé hlavičky, abyste se rozhodli, zda se má zpráva přesunout před frontu.

Filtrování tabulek

Tabulky filtrů se používají k ukládání párů klíč-hodnota, kde je klíčem filtr a některá přidružená data jsou hodnotou. Data filtru lze použít k označení akcí, které se mají provést, pokud zpráva odpovídá filtru a typ dat filtru je obecný parametr pro třídu tabulky filtru. Data filtru se můžou skládat z pravidel směrování, stavu zabezpečení relace, naslouchacích procesů v kanálu atd. Data je možné použít tam, kde je potřeba řídit tok dat.

Filtrování tabulek implementuje obecné rozhraní IMessageFilterTable<TFilterData>.

Tabulky filtru mají několik metod, které odpovídají zprávě se všemi filtry v tabulce a vrací neseřazenou kolekci odpovídajících filtrů nebo dat. Některé metody shody jsou vícenásobné shody a vrátí všechny odpovídající položky. Jiné jsou shodné, vrací pouze jednu položku a vyvolají MultipleFilterMatchesException výjimku, pokud odpovídá více než jednomu filtru.

Tabulka filtru zpráv

Jedná se MessageFilterTable<TFilterData> o nejobecnější implementaci IMessageFilterTable<TFilterData>. Filtry všech typů můžete uložit v tabulce.

K filtrům můžete přiřadit číselné priority, kde nejvyšší prioritu označuje nejvyšší číslo. Stejnou prioritu může mít více typů filtrů. Konkrétní typ filtru se může zobrazit ve více než jedné úrovni priority.

Porovnávání se provádí od nejvyšší priority a jakmile jsou nalezeny odpovídající filtry s danou prioritou, neprověřují se žádné filtry s nižšími prioritami. Proto pokud používáte metodu shody s jedním filtrem a více než jeden filtr odpovídá zprávě, ale každý odpovídající filtr má jinou prioritu, nevyvolá se žádná výjimka a vrátí se filtr s nejvyšší prioritou. Podobně metoda shody s více filtry vrátí pouze ty odpovídající filtry s nejvyšší prioritou.

Tabulka filtru zpráv XPath

Je XPathMessageFilterTable<TFilterData> optimalizovaný pro deklarativní filtry XPath, takže klíč tabulky je XPathMessageFilter.

Třída XPathMessageFilterTable<TFilterData> optimalizuje shodu pro podmnožinu XPath, která pokrývá většinu scénářů zasílání zpráv a podporuje také úplnou gramatiku XPath 1.0. Má optimalizované algoritmy pro efektivní paralelní porovnávání.

Tato tabulka obsahuje několik specializovaných Match metod, které pracují s a XPathNavigatorSeekableXPathNavigator. A SeekableXPathNavigator rozšiřuje XPathNavigator třídu přidáním CurrentPosition vlastnosti. Tato vlastnost umožňuje ukládat a načítat pozice v dokumentu XML rychle, aniž by bylo nutné naklonovat navigátor, nákladné přidělení paměti, které XPathNavigator vyžaduje takovou operaci. Modul WCF XPath musí často zaznamenávat pozici kurzoru v průběhu provádění dotazů na dokumenty XML, takže SeekableXPathNavigator poskytuje důležitou optimalizaci pro zpracování zpráv.

Scénáře zákazníků

Filtrování můžete použít kdykoli, když chcete zprávu odeslat do různých modulů zpracování v závislosti na datech obsažených ve zprávě. Dva typické scénáře směrují zprávu na základě kódu akce a de-multiplexují datový proud zpráv na základě adresy koncového bodu zprávy.

Směrování

Naslouchací proces koncového bodu naslouchá zprávám, které mají v hlavičce SOAP zprávy jeden nebo více kódů akcí. Implementujete to tak, že vytvoříte ActionMessageFilter pole, které obsahuje kódy akcí do jeho konstruktoru. Tento filtr používá k registraci pomocí ListenerFactorytohoto filtru, takže pouze zprávy, jejichž akce odpovídá jednomu z těch, které jsou ve filtru, se dostanou k tomuto konkrétnímu koncovému bodu.

De-multiplexing

Pokud se ze stejného ServiceListener přenosu oddálí více koncových bodů, jediným způsobem, jak de-multiplexové zprávy a zjistit, jestli patří do určité adresy koncového bodu, je použít EndpointAddressMessageFilters, které vyberou zprávy směrem k registrovaným koncovým bodům provedením vyhledávání informací uložených v hlavičkách. V těchto filtrech mají pouze zprávy, které předávají všechny nezbytné hlavičky, které odpovídají oběma těmto:

  • Identifikátor URI v souboru EndpointAddress.

  • Zbývající parametry koncového bodu v parametru EndpointAddress zadaném v parametru EndpointAddressMessageFilter.

Viz také