Filtre Seçme
Yönlendirme Hizmeti'ni yapılandırırken, doğru ileti filtrelerini seçmek ve bunları aldığınız iletilerle tam eşleşmeler yapmanıza izin verecek şekilde yapılandırmak önemlidir. Seçtiğiniz filtreler eşleşmeleri fazla genişse veya yanlış yapılandırılmışsa, iletiler yanlış yönlendirilir. Filtreler çok kısıtlayıcıysa, bazı iletileriniz için kullanılabilir geçerli yollarınız olmayabilir.
Filtre Türleri
Yönlendirme Hizmeti tarafından kullanılan filtreleri seçerken, her filtrenin nasıl çalıştığını ve gelen iletilerin bir parçası olarak hangi bilgilerin kullanılabilir olduğunu anlamanız önemlidir. Örneğin, tüm iletiler aynı uç nokta üzerinden alınırsa, tüm iletiler bu filtrelerle eşleştiğinden Address ve EndpointName filtreleri kullanışlı olmaz.
Eylem
Eylem filtresi özelliği inceler Action . İletideki Eylem üst bilgisinin içeriği, filtre yapılandırmasında belirtilen filtre veri değeriyle eşleşiyorsa, bu filtre döndürür true
. Aşağıdaki örnek, iletileri değeri içeren bir FilterElement
eylem üst bilgisi ile eşleştirmek için Eylem filtresini http://namespace/contract/operation/
kullanan bir öğesini tanımlar.
<filter name="action1" filterType="Action" filterData="http://namespace/contract/operation/" />
ActionMessageFilter action1 = new ActionMessageFilter(new string[] { "http://namespace/contract/operation" });
Bu filtre, benzersiz bir Eylem üst bilgisi içeren iletileri yönlendirirken kullanılmalıdır.
Endpointaddress
EndpointAddress filtresi, iletinin alındığı EndpointAddress'i inceler. İletinin geldiği adres, filtre yapılandırmasında belirtilen filtre adresiyle tam olarak eşleşiyorsa, bu filtre döndürür true
. Aşağıdaki örnek, "http://< hostname>/vdir/s.svc/b" adresine gönderilen tüm iletilerle eşleştirmek için Adres filtresini kullanan bir FilterElement
öğesini tanımlar.
<filter name="address1" filterType="EndpointAddress" filterData="http://host/vdir/s.svc/b" />
EndpointAddressMessageFilter address1 = new EndpointAddressMessageFilter(new EndpointAddress("http://host/vdir/s.svc/b"), false);
Not
Bir adresin ana bilgisayar adı bölümünün, istemcinin tam etki alanı adını, NetBIOS adını, IP adresini veya başka bir adı kullanıp kullanmadığına bağlı olarak farklılık gösterebileceğini unutmayın. Farklı değerler aynı konağa başvurabildiğinden, bu karşılaştırma için varsayılan davranış, eşleşmeleri gerçekleştirirken adresin ana bilgisayar adı bölümünü kullanmamaktır.
Bu davranış, yönlendirme hizmeti program aracılığıyla yapılandırılırken karşılaştırmanın ana bilgisayar adını değerlendirmesine izin verecek şekilde değiştirilebilir.
Bu filtre, gelen iletiler benzersiz bir adrese adreslendiğinde kullanılmalıdır.
EndpointAddressPrefix
EndpointAddressPrefix filtresi EndpointAddress filtresine benzer. EndpointAddressPrefix filtresi, iletinin alındığı EndpointAddress'i inceler. Ancak EndpointAddressPrefix filtresi, filtre yapılandırmasında belirtilen değerle başlayan adresleri eşleştirerek joker karakter işlevi görür. Aşağıdaki örnek, ile adreslenen tüm iletileri eşleştirmek için EndpointAddressPrefix filtresini http://<hostname>/vdir*
kullanan bir FilterElement
öğesini tanımlar.
<filter name="prefix1" filterType="EndpointAddressPrefix" filterData="http://host/vdir" />
PrefixEndpointAddressMessageFilter prefix1 = new PrefixEndpointAddressMessageFilter(new EndpointAddress("http://host/vdir/s.svc/b"), false);
Not
Bir adresin ana bilgisayar adı bölümünün, istemcinin tam etki alanı adını, NetBIOS adını, IP adresini veya başka bir adı kullanıp kullanmadığına bağlı olarak farklılık gösterebileceğini unutmayın. Farklı değerler aynı konağa başvurabildiğinden, bu karşılaştırma için varsayılan davranış, eşleşmeleri gerçekleştirirken adresin ana bilgisayar adı bölümünü kullanmamaktır.
Bu filtre, ortak bir adres ön eki paylaşan gelen iletileri yönlendirirken kullanılmalıdır.
AND
AND filtresi, iletideki bir değere doğrudan filtre uygulamaz, ancak ve filtresi olarak değerlendirilmeden önce her iki filtrenin de iletiyle eşleşmesi gereken bir AND
koşul oluşturmak için diğer iki filtreyi true
birleştirmenize olanak tanır. Bu, yalnızca tüm alt filtreler eşleşirse eşleşen karmaşık filtreler oluşturmanıza olanak tanır. Aşağıdaki örnek bir adres filtresini ve eylem filtresini tanımlar ve ardından bir iletiyi hem adres hem de eylem filtrelerine göre değerlendiren bir AND filtresi tanımlar. Hem adres hem de eylem filtreleri eşleşiyorsa VE filtresi döndürür true
.
<filter name="address1" filterType="AddressPrefix" filterData="http://host/vdir"/>
<filter name="action1" filterType="Action" filterData="http://namespace/contract/operation/"/>
<filter name="and1" filterType="And" filter1="address1" filter2="action1" />
EndpointAddressMessageFilter address1 = new EndpointAddressMessageFilter(new EndpointAddress("http://host/vdir/s.svc/b"), false);
ActionMessageFilter action1 = new ActionMessageFilter(new string[] { "http://namespace/contract/operation" });
StrictAndMessageFilter and1=new StrictAndMessageFilter(address1, action1);
Bu filtre, bir eşleşmenin ne zaman yapılması gerektiğini belirlemek için birden çok filtredeki mantığı birleştirmeniz gerektiğinde kullanılmalıdır. Örneğin, yalnızca belirli adreslere yönelik belirli eylem ve ileti bileşimlerini alması gereken birden çok hedefiniz varsa, gerekli Eylem ve Adres filtrelerini birleştirmek için AND filtresi kullanabilirsiniz.
Özel
Özel filtre türünü seçerken, bu filtre için kullanılacak MessageFilter uygulamasını içeren derlemenin türünü içeren bir customType değeri sağlamanız gerekir. Ayrıca filterData, iletilerin değerlendirilmesinde özel filtrenin gerektirebileceği tüm değerleri içermelidir. Aşağıdaki örnek, MessageFilter uygulamasını kullanan CustomAssembly.MyCustomMsgFilter
bir FilterElement
öğesini tanımlar.
<filter name="custom1" filterType="Custom" customType="CustomAssembly.MyCustomMsgFilter, CustomAssembly" filterData="Custom Data" />
MyCustomMsgFilter custom1=new MyCustomMsgFilter("Custom Data");
.NET Framework 4.6.1 ile sağlanan filtrelerin kapsamına alınmayan bir iletiye karşı özel eşleştirme mantığı gerçekleştirmeniz gerekiyorsa, MessageFilter sınıfının bir uygulaması olan özel bir filtre oluşturmanız gerekir. Örneğin, gelen iletideki bir alanı, filtreye yapılandırma olarak verilen bilinen değerlerin listesiyle karşılaştıran veya belirli bir ileti öğesini karma hale getiren ve sonra filtrenin veya false
döndürerek döndürmeyeceğini true
belirlemek için bu değeri inceleyen özel bir filtre oluşturabilirsiniz.
EndpointName
EndpointName filtresi, iletiyi alan uç noktanın adını inceler. Aşağıdaki örnek, "SvcEndpoint" üzerinde alınan iletileri yönlendirmek için EndpointName filtresini kullanan bir FilterElement
öğesini tanımlar.
<filter name="name1" filterType="Endpoint" filterData="SvcEndpoint" />
EndpointNameMessageFilter name1 = new EndpointNameMessageFilter("SvcEndpoint");
Bu filtre, Yönlendirme Hizmeti birden fazla adlandırılmış hizmet uç noktasını kullanıma sunarken kullanışlıdır. Örneğin, Yönlendirme Hizmeti'nin iletileri almak için kullandığı iki uç noktayı kullanıma sunmanız gerekebilir; biri, iletilerinin gerçek zamanlı işlenmesini gerektiren öncelikli müşteriler tarafından kullanılırken, diğer uç nokta zamana duyarlı olmayan iletiler alır.
bir iletinin hangi uç noktaya alındığını belirlemek için genellikle tam adres eşleştirmeyi kullanabilirsiniz, ancak bunun yerine tanımlı uç nokta adını kullanmak, özellikle bir yapılandırma dosyası kullanarak yönlendirme hizmeti yapılandırırken (uç nokta adlarının gerekli bir öznitelik olduğu durumlarda) genellikle daha az hataya açık olan kullanışlı bir kısayoldur.
MatchAll
MatchAll filtresi, alınan tüm iletiyle eşleşir. Alınan tüm iletilerin bir kopyasını depolayan günlük hizmeti gibi belirli bir uç noktaya her zaman yönlendirmeniz gerekiyorsa kullanışlıdır. Aşağıdaki örnek, MatchAll filtresini kullanan bir FilterElement
öğesini tanımlar.
<filter name="matchAll1" filterType="MatchAll" />
MatchAllMessageFilter matchAll1 = new MatchAllMessageFilter();
XPath
XPath filtresi, iletideki belirli bir öğeyi incelemek için kullanılan bir XPath sorgusu belirtmenize olanak tanır. XPath filtreleme, iletideki adreslenebilir XML girdilerini doğrudan incelemenizi sağlayan güçlü bir filtreleme seçeneğidir; ancak, aldığınız iletilerin yapısı hakkında belirli bir bilgiye sahip olmanız gerekir. Aşağıdaki örnek, "ns" ad alanı ön eki tarafından başvuruda bulunan ad alanı içinde "element" adlı bir öğenin iletisini incelemek için XPath filtresini kullanan bir öğesini tanımlar FilterElement
.
<filter name="xpath1" filterType="XPath" filterData="//ns:element" />
XPathMessageFilter xpath1=new XPathMessageFilter("//ns:element");
Bu filtre, aldığınız iletilerin belirli bir değer içerdiğini biliyorsanız kullanışlıdır. Örneğin, aynı hizmetin iki sürümünü barındırıyorsanız ve hizmetin daha yeni sürümüne gönderilen iletilerin özel üst bilgide benzersiz bir değer içerdiğini biliyorsanız, bu üst bilgide gezinmek için XPath kullanan bir filtre oluşturabilir ve filtrenin eşleşip eşleşmediğini belirlemek için üst bilgide bulunan değeri filtre yapılandırmasında verilen başka bir değerle karşılaştırabilirsiniz.
XPath sorguları genellikle uzun veya karmaşık dize değerleri olan benzersiz ad alanları içerdiğinden, XPath filtresi ad alanlarınız için benzersiz ön ekler tanımlamak üzere ad alanı tablosunu kullanmanıza olanak tanır. Ad alanı tablosu hakkında daha fazla bilgi için bkz . İleti Filtreleri.
XPath sorguları tasarlama hakkında daha fazla bilgi için bkz . XPath Sözdizimi.