Aracılığıyla paylaş


Filtreleme

Windows Communication Foundation (WCF) filtreleme sistemi, iletileri eşleştirmek ve işletimsel kararlar almak için bildirim temelli filtreler kullanabilir. İletinin bir bölümünü inceleyerek iletiyle ne yapacağınızı belirlemek için filtreleri kullanabilirsiniz. Örneğin bir kuyruğa alma işlemi, bir iletiyi kuyruğun önüne taşıyıp taşımayacağını belirlemek üzere bilinen üst bilginin öncelik öğesini denetlemek için XPath 1.0 sorgusu kullanabilir.

Filtreleme sistemi, belirli bir WCF iletisi için hangi filtre true kümesinin etkili bir şekilde belirlenebileceğini belirleyen bir sınıf kümesinden oluşur.

Filtreleme sistemi WCF mesajlaşmasının temel bileşenlerindendir; son derece hızlı olacak şekilde tasarlanmıştır. Her filtre uygulaması WCF iletileriyle belirli bir tür eşleştirme için iyileştirilmiştir.

Filtreleme sistemi iş parçacığı güvenli değildir. Uygulamanın herhangi bir kilitleme semantiğini işlemesi gerekir. Ancak, çok okuyuculu, tek bir yazıcıyı destekler.

FiltrelemeNin Sığdığı Yer

Filtreleme, bir ileti alındıktan sonra gerçekleştirilir ve iletiyi uygun uygulama bileşenine gönderme işleminin bir parçasıdır. Filtreleme sisteminin tasarımı mesajlaşma, yönlendirme, güvenlik, olay işleme ve sistem yönetimi gibi çeşitli WCF alt sistemlerinin gereksinimlerini karşılar.

Filtreler

Filtre altyapısının iki birincil bileşeni vardır: filtreler ve filtre tabloları. Filtre, kullanıcı tarafından belirtilen mantıksal koşullara göre ileti hakkında Boole kararları verir. Filtreler sınıfını MessageFilter uygular.

Yöntemler Match , bir iletinin bir filtreye uygun olup olmadığını belirlemek için kullanılır. Yöntemlerden biri iletinin üst bilgisini test eder, ancak ileti gövdesini inceleyemez. Diğer yöntem, giriş parametresi olarak bir ileti arabelleği alır ve ileti gövdesini inceleyebilir.

Filtreler genellikle tek tek değil, yöntemin oluşturduğu genel bir sınıf olan bir filtre tablosunun CreateFilterTable parçası olarak test edilir.

Her biri belirli bir Boole koşulu türüyle eşleştirme konusunda uzmanlaşmış olan çeşitli filtre türleri. Filtreyi oluşturduğunuzda, filtrenin kullandığı ölçütleri değiştiremezsiniz; filtrenin ölçütlerini değiştirmek için yeni bir filtre oluşturup var olan filtreyi silin.

Eylem Filtreleri

, ActionMessageFilter eylem dizelerinin listesini içerir. Filtre listesindeki eylemlerden herhangi biri ileti veya ileti arabelleğindeki Eylem üst bilgisi ile eşleşiyorsa, Match yöntemi döndürür true. Liste boşsa, filtre tümünü eşleştir filtresi olarak kabul edilir ve herhangi bir ileti veya ileti arabelleği ile eşleşir ve Match döndürür true. Filtre listesindeki eylemlerden hiçbiri iletideki veya ileti arabelleğindeki Eylem üst bilgisiyle eşleşmiyorsa, Matchfalse döner. Eğer iletide eylem yoksa ve filtrenin listesi boş değilse, o zaman Matchfalse döndürür.

Uç Nokta Adresi Filtreleri

İletileri EndpointAddressMessageFilter ve ileti arabelleklerini, üst bilgi koleksiyonunda gösterildiği gibi, bir uç nokta adresine göre filtreler. İletinin böyle bir filtre geçirmesi için aşağıdaki koşulların karşılanması gerekir:

  • Filtrenin adresi Tekdüzen Kaynak Tanımlayıcısı (URI), Hedef üst bilgisindeki adresle aynı olmalıdır.

  • Filtrenin (address.Headers koleksiyon) adresindeki her uç nokta parametresinin, iletide haritalanacağı bir başlık bulması gerekir. Eşleşmenin kalması için iletideki veya ileti arabelleğindeki fazladan üst bilgiler kabul edilebilirtrue.

Ön Ek Uç Nokta Adres Filtreleri

  1. PrefixEndpointAddressMessageFilter, EndpointAddressMessageFilter filtresi gibi işlev görür, ancak eşleşme ileti URI'sinin bir ön ekinde olabilir. Örneğin, http://www.adatum.com adresini belirten bir filtre, http://www.adatum.com/userA adresine gönderilen mesajlarla eşleşir.

XPath İleti Filtreleri

bir XPathMessageFilter XML belgesinin belirli öğeler, öznitelikler, metin veya diğer XML söz dizimli yapıları içerip içermediğini belirlemek için bir XPath ifadesi kullanır. Filtre, XPath'in katı bir alt kümesi için son derece verimli olacak şekilde iyileştirilmiştir. XML Yol Dili , W3C XML Yol Dili 1.0 belirtiminde açıklanmıştır.

Genellikle, bir uygulama XPathMessageFilter bir SOAP iletisinin içeriğini sorgulamak için uç noktada kullanır ve ardından bu sorgunun sonuçlarına göre uygun eylemi gerçekleştirir. Örneğin kuyruğa alma işlemi, bir iletiyi kuyruğun önüne taşıyıp taşımamaya karar vermek üzere bilinen bir üst bilginin öncelik öğesini incelemek için bir XPath sorgusu kullanabilir.

Tabloları Filtrele

Filtre tabloları anahtar-değer çiftlerini depolamak için kullanılır; burada bir filtre anahtardır ve bazı ilişkili veriler değerdir. Filtre verileri, bir ileti filtreyle eşleşiyorsa hangi eylemlerin gerçekleştirildiğini belirtmek için kullanılabilir ve filtre verilerinin türü filtre tablosu sınıfının genel parametresidir. Filtre verileri yönlendirme kurallarından, oturum güvenlik durumundan, kanaldaki dinleyicilerden vb. oluşabilir. Veriler, veri akışı denetiminin gerekli olduğu yerlerde kullanılabilir.

Filtre tabloları genel arabirimini IMessageFilterTable<TFilterData>uygular.

Filtre tabloları, bir mesajı tablodaki tüm filtrelerle eşleştiren ve eşleşen filtreler ya da verilerden oluşan sıralanmamış bir koleksiyon döndüren çeşitli yöntemler içerir. Eşleştirme yöntemlerinden bazıları çoklu eşleşmedir ve eşleşen tüm öğeleri döndürür. Diğerleri tek bir eşleşme olanı geri döndürür ve birden fazla filtre eşleşmesi varsa MultipleFilterMatchesException hatası oluşturur.

İleti Filtresi Tablosu

MessageFilterTable<TFilterData>, IMessageFilterTable<TFilterData>'in en genel halidir. Tablodaki tüm türlerin filtrelerini depolayabilirsiniz.

Filtrelere, en yüksek önceliğin en yüksek sayı tarafından işaretlendiği sayısal öncelikleri atayabilirsiniz. Birden çok filtre türü aynı önceliğe sahip olabilir. Belirli bir filtre türü birden fazla öncelik düzeyinde görünebilir.

Eşleştirme en yüksek öncelikle başlayarak yapılır ve belirli bir önceliğe sahip eşleşen filtreler bulunduktan sonra, daha düşük öncelikli filtrelere bakılmaz. Bu nedenle, tek filtreli eşleştirme yöntemi kullanıyorsanız ve birden fazla filtre bir iletiyle eşleşiyorsa ve her eşleşen filtrenin farklı bir önceliği varsa, hiçbir istisna atılmaz ve en yüksek önceliğe sahip filtre döndürülür. Benzer şekilde, çok filtreli eşleştirme yöntemi yalnızca en yüksek önceliğe sahip eşleşen filtreleri döndürür.

XPath İleti Filtresi Tablosu

XPathMessageFilterTable<TFilterData>, bildirim temelli XPath filtreleri için iyileştirildiğinden tablo anahtarı bir XPathMessageFilterolur.

sınıfı, XPathMessageFilterTable<TFilterData> mesajlaşma senaryolarının çoğunu kapsayan ve aynı zamanda tam XPath 1.0 dil bilgisini destekleyen bir XPath alt kümesi için eşleştirmeyi iyileştirir. Verimli paralel eşleştirme için iyileştirilmiş algoritmalara sahiptir.

Bu tabloda Match ve XPathNavigator üzerinde çalışan birkaç özel SeekableXPathNavigator yöntemi bulunmaktadır. Bir SeekableXPathNavigator, bir XPathNavigator özelliği ekleyerek CurrentPosition sınıfını genişletir. Bu özellik, XML belgesi içindeki konumların, böyle bir işlem için gerekli olan pahalı bir bellek ayırması olan gezgin kopyalamaya gerek kalmadan hızlı bir şekilde kaydedilmesini ve yüklenmesini XPathNavigator sağlar. WCF XPath altyapısının, XML belgelerinde sorgu yürütme sırasında imlecin konumunu sık sık kaydetmesi gerekir, bu nedenle SeekableXPathNavigator ileti işleme için önemli bir iyileştirme sağlar.

Müşteri Senaryoları

İletide yer alan verilere bağlı olarak, farklı işleme modüllerine ileti göndermek istediğiniz zaman filtrelemeyi kullanabilirsiniz. İki tipik senaryo, bir iletiyi eylem koduna göre yönlendirmek ve iletilerin uç nokta adresine göre bir ileti akışının çoğullamasını kaldırmadır.

Yönlendirme

Uç noktanın dinleyicisi, iletinin SOAP üst bilgisinde bir veya daha fazla eylem kodu bulunan iletileri dinler. Bunu, eylem kodlarını içeren bir diziyi oluşturucusuna geçirerek bir ActionMessageFilter oluşturup uygularsınız. Bu filtreyi ListenerFactory öğesine kaydolarak kullanır, böylece yalnızca eylemi filtredekilerden biriyle eşleşen iletiler o belirli uç noktasına ulaşır.

Çoğullama kaldırma

Birden çok uç nokta aynı ServiceListener kablodan dışarı çıktığında, iletilerin ayırmanın ve bunların belirli bir uç nokta adresine ait olup olmadığını bilmenin tek yolu, üst bilgilerde depolanan bilgiler üzerinde arama yaparak kayıtlı uç noktalara yönelik iletileri seçen EndpointAddressMessageFilter kullanmaktır. Bu filtrelerde, yalnızca geçen iletiler her ikisine de karşılık gelen tüm gerekli üst bilgilere sahiptir:

  • EndpointAddress içindeki URI.

  • EndpointAddressöngörüldüğü üzere EndpointAddressMessageFilter içindeki uç nokta parametrelerinin geri kalanı.

Ayrıca bakınız