Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
När du konfigurerar routningstjänsten är det viktigt att välja rätt meddelandefilter och konfigurera dem så att du kan göra exakta matchningar mot de meddelanden du får. Om filtren du väljer är alltför breda i sina matchningar eller är felaktigt konfigurerade dirigeras meddelanden felaktigt. Om filtren är för restriktiva kanske du inte har några giltiga vägar tillgängliga för vissa av dina meddelanden.
Filtertyper
När du väljer de filter som används av routningstjänsten är det viktigt att du förstår hur varje filter fungerar samt vilken information som är tillgänglig som en del av inkommande meddelanden. Om till exempel alla meddelanden tas emot via samma slutpunkt är filtren Adress och EndpointName inte användbara eftersom alla meddelanden matchar dessa filter.
Åtgärd
Filtret Åtgärd inspekterar egenskapen Action . Om innehållet i åtgärdsrubriken i meddelandet matchar filterdatavärdet som anges i filterkonfigurationen returnerar truedet här filtret . I följande exempel definieras en FilterElement som använder åtgärdsfiltret för att matcha meddelanden med en åtgärdsrubrik som innehåller värdet http://namespace/contract/operation/.
<filter name="action1" filterType="Action" filterData="http://namespace/contract/operation/" />
ActionMessageFilter action1 = new ActionMessageFilter(new string[] { "http://namespace/contract/operation" });
Det här filtret bör användas vid routning av meddelanden som innehåller ett unikt åtgärdshuvud.
Slutpunktsadress
Filtret EndpointAddress inspekterar den EndpointAddress som meddelandet togs emot på. Om adressen som meddelandet kommer till exakt matchar den filteradress som anges i filterkonfigurationen returnerar truedet här filtret . I följande exempel definieras ett FilterElement som använder adressfiltret för att matcha meddelanden som är adresserade till "http://< hostname>/vdir/s.svc/b".
<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);
Anmärkning
Det är viktigt att observera att värdnamnsdelen av en adress kan skilja sig beroende på om klienten använder det fullständigt kvalificerade domännamnet, NetBIOS-namnet, IP-adressen eller något annat namn. Eftersom olika värden kan referera till samma värd är standardbeteendet för den här jämförelsen att inte använda värdnamnsdelen av adressen när matchningar utförs.
Det här beteendet kan ändras så att jämförelsen kan utvärdera värdnamnet när du konfigurerar routningstjänsten programmatiskt.
Det här filtret bör användas när inkommande meddelanden adresseras till en unik adress.
Prefix för slutpunktsadress
Filtret EndpointAddressPrefix liknar filtret EndpointAddress. Filtret EndpointAddressPrefix inspekterar den EndpointAddress som meddelandet togs emot på. Filtret EndpointAddressPrefix fungerar dock som ett jokertecken genom att matcha adresser som börjar med det värde som anges i filterkonfigurationen. I följande exempel definieras en FilterElement som använder filtret EndpointAddressPrefix för att matcha alla meddelanden som är adresserade till http://<hostname>/vdir*.
<filter name="prefix1" filterType="EndpointAddressPrefix" filterData="http://host/vdir" />
PrefixEndpointAddressMessageFilter prefix1 = new PrefixEndpointAddressMessageFilter(new EndpointAddress("http://host/vdir/s.svc/b"), false);
Anmärkning
Det är viktigt att observera att värdnamnsdelen av en adress kan skilja sig beroende på om klienten använder det fullständigt kvalificerade domännamnet, NetBIOS-namnet, IP-adressen eller något annat namn. Eftersom olika värden kan referera till samma värd är standardbeteendet för den här jämförelsen att inte använda värdnamnsdelen av adressen när matchningar utförs.
Det här filtret bör användas vid routning av inkommande meddelanden som delar ett gemensamt adressprefix.
OCH
AND-filtret filtrerar inte direkt på ett värde i ett meddelande, men låter dig kombinera två andra filter för att skapa ett AND villkor där båda filtren måste matcha meddelandet innan AND-filtret utvärderas till true. På så sätt kan du skapa komplexa filter som bara matchar om alla underfilter matchar. I följande exempel definieras ett adressfilter och ett åtgärdsfilter och sedan definieras ett AND-filter som utvärderar ett meddelande mot både adress- och åtgärdsfilter. Om både adress- och åtgärdsfiltren matchar, returnerar AND-filtret 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);
Det här filtret bör användas när du måste kombinera logiken från flera filter för att avgöra när en matchning ska göras. Om du till exempel har flera mål som bara måste ta emot vissa kombinationer av åtgärder och meddelanden till specifika adresser kan du använda ett AND-filter för att kombinera nödvändiga åtgärds- och adressfilter.
Skräddarsydd
När du väljer den anpassade filtertypen måste du ange ett customType-värde som innehåller den typ av sammansättning som innehåller MessageFilter-implementeringen som ska användas för det här filtret. Dessutom måste filterData innehålla alla värden som det anpassade filtret kan kräva i sin utvärdering av meddelanden. I följande exempel definieras en FilterElement som använder CustomAssembly.MyCustomMsgFilter MessageFilter-implementeringen.
<filter name="custom1" filterType="Custom" customType="CustomAssembly.MyCustomMsgFilter, CustomAssembly" filterData="Custom Data" />
MyCustomMsgFilter custom1=new MyCustomMsgFilter("Custom Data");
Om du behöver utföra anpassad matchningslogik mot ett meddelande som inte omfattas av filtren som tillhandahålls med .NET Framework 4.6.1 måste du skapa ett anpassat filter som är en implementering av klassen MessageFilter . Du kan till exempel skapa ett anpassat filter som jämför ett fält i det inkommande meddelandet med en lista över kända värden som anges för filtret som konfiguration, eller som hashar ett visst meddelandeelement och sedan undersöker det värdet för att avgöra om filtret ska returnera true eller false.
Slutpunktsnamn
Filtret EndpointName kontrollerar namnet på slutpunkten som tog emot meddelandet. I följande exempel definieras ett FilterElement som använder EndpointName-filtret för att dirigera meddelanden som tas emot på "SvcEndpoint".
<filter name="name1" filterType="Endpoint" filterData="SvcEndpoint" />
EndpointNameMessageFilter name1 = new EndpointNameMessageFilter("SvcEndpoint");
Det här filtret är användbart när routningstjänsten exponerar mer än en namngiven tjänstslutpunkt. Du kan till exempel exponera två slutpunkter som routningstjänsten använder för att ta emot meddelanden. den ena används av prioriterade kunder som behöver bearbetning i realtid av sina meddelanden, medan den andra slutpunkten tar emot meddelanden som inte är tidskänsliga.
Du kan ofta använda fullständig adressmatchning för att avgöra vilken slutpunkt ett meddelande togs emot på, men att använda det definierade slutpunktsnamnet i stället är en praktisk genväg som ofta är mindre felbenägen, särskilt när du konfigurerar en routningstjänst med hjälp av en konfigurationsfil (där slutpunktsnamn är ett obligatoriskt attribut).
MatchAlla
Filtret MatchAll matchar alla mottagna meddelanden. Det är användbart om du alltid måste dirigera alla mottagna meddelanden till en viss slutpunkt, till exempel en loggningstjänst som lagrar en kopia av alla mottagna meddelanden. I följande exempel definieras en FilterElement som använder filtret MatchAll.
<filter name="matchAll1" filterType="MatchAll" />
MatchAllMessageFilter matchAll1 = new MatchAllMessageFilter();
XPath
Med XPath-filtret kan du ange en XPath-fråga som används för att inspektera ett visst element i meddelandet. XPath-filtrering är ett kraftfullt filtreringsalternativ som gör att du direkt kan granska alla XML-adresserbara inmatningar i meddelandet. Men det kräver att du har specifik kunskap om strukturen för de meddelanden som du får. I följande exempel definieras ett FilterElement som använder XPath-filtret för att inspektera meddelandet efter ett element med namnet "element" i namnområdet som refereras till av namnområdesprefixet "ns".
<filter name="xpath1" filterType="XPath" filterData="//ns:element" />
XPathMessageFilter xpath1=new XPathMessageFilter("//ns:element");
Det här filtret är användbart om du vet att de meddelanden du får innehåller ett specifikt värde. Om du till exempel är värd för två versioner av samma tjänst och vet att meddelanden som är adresserade till den nyare versionen av tjänsten innehåller ett unikt värde i ett anpassat huvud, kan du skapa ett filter som använder XPath för att navigera till det här huvudet och jämföra värdet i huvudet med ett annat som anges i filterkonfigurationen för att avgöra om filtret matchar.
Eftersom XPath-frågor ofta innehåller unika namnområden, som ofta är långa eller komplexa strängvärden, kan du med XPath-filtret använda namnområdestabellen för att definiera unika prefix för dina namnområden. Mer information om namnområdestabellen finns i Meddelandefilter.
Mer information om hur du utformar XPath-frågor finns i XPath-syntax.