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ğil. 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 eylemlerin hiçbiri iletideki veya ileti arabelleğindeki Eylem üst bilgisiyle eşleşmiyorsa döndürür Matchfalse. İletide eylem yoksa ve filtrenin listesi boş değilse döndürür Matchfalse.

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 eşleneceği bir üst bilgi bulması gerekir. Eşleşmenin kalması trueiçin iletideki veya ileti arabelleğindeki ek üst bilgiler kabul edilebilir.

Ön Ek Uç Nokta Adres Filtreleri

  1. Eşleşmenin PrefixEndpointAddressMessageFilter ileti URI'sinin EndpointAddressMessageFilter bir ön ekinde olması dışında, filtre gibi işlevler. Örneğin, adresi http://www.adatum.com belirten bir filtre adresine gönderilen http://www.adatum.com/userAiletiyle 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ında, tablodaki tüm filtrelerle bir iletiyle eşleşen ve eşleşen filtreler veya verilerden oluşan sıralanmamış bir koleksiyon döndüren çeşitli yöntemler vardır. 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 eşleşmelidir, yalnızca bir öğe döndürür ve birden fazla filtre eşleşmesi varsa oluşturur MultipleFilterMatchesException .

İleti Filtresi Tablosu

MessageFilterTable<TFilterData>, uygulamasının en genel uygulamasıdırIMessageFilterTable<TFilterData>. 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, düşük önceliğe sahip hiçbir filtre incelenir. Bu nedenle, tek filtreli eşleştirme yöntemi kullanıyorsanız ve birden fazla filtre bir iletiyle eşleşiyorsa, ancak eşleşen her filtrenin farklı bir önceliği varsa, hiçbir özel durum oluşturulur 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 ve üzerinde XPathNavigatorSeekableXPathNavigatorçalışan çeşitli özel Match yöntemler vardır. bir SeekableXPathNavigator özelliği ekleyerek CurrentPosition sınıfını genişletirXPathNavigator. 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 ActionMessageFilter diziyi oluşturucusna geçirerek bir oluşturarak uygularsınız. Bu filtreyi ListenerFactorykullanarak öğesine kaydolarak yalnızca eylemi filtredekilerden biriyle eşleşen iletiler söz konusu uç noktaya gelir.

Çoğullama kaldırma

Birden çok uç nokta aynı ServiceListener kablodan dışarı çıktığında, iletilerin çoğullamasını kaldı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 s kullanmaktır EndpointAddressMessageFilter. Bu filtrelerde, yalnızca geçen iletiler her ikisine de karşılık gelen tüm gerekli üst bilgilere sahiptir:

Ayrıca bkz.