Auswählen eines FiltersChoosing a Filter

Beim Konfigurieren des Routingdiensts ist es wichtig, richtige Nachrichtenfilter auszuwählen und so zu konfigurieren, dass Sie genaue Übereinstimmungen mit den Nachrichten erzielen können, die Sie empfangen.When configuring the Routing Service, it is important to select correct message filters and configure them to allow you to make exact matches against the messages you receive. Falls die ausgewählten Filter in Bezug auf die Übereinstimmungen zu ungenau oder falsch konfiguriert sind, werden die Nachrichten nicht korrekt weitergeleitet.If the filters you select are overly broad in their matches or are incorrectly configured, messages are routed incorrectly. Wenn die Filter zu restriktiv sind, kann es sein, dass für einige Nachrichten keine gültigen Weiterleitungsrouten verfügbar sind.If the filters are too restrictive, you may not have any valid routes available for some of your messages.

FiltertypenFilter Types

Beim Auswählen der vom Routingdienst verwendeten Filter ist es wichtig, dass Sie verstehen, wie die einzelnen Filter funktionieren. Außerdem sollten Sie wissen, welche Informationen in Verbindung mit den eingehenden Nachrichten verfügbar sind.When selecting the filters that are used by the Routing Service, it is important that you understand how each filter works as well as what information is available as part of the incoming messages. Falls beispielsweise alle Nachrichten über den gleichen Endpunkt empfangen werden, sind die Adress- und EndpointName-Filter nicht hilfreich, weil alle Nachrichten Übereinstimmungen mit diesen Filtern aufweisen.For instance, if all messages are received over the same endpoint, the Address and EndpointName filters are not useful because all messages match these filters.

AktionAction

Der Action-Filter überprüft die Action-Eigenschaft.The Action filter inspects the Action property. Falls der Inhalt des Action-Headers in der Nachricht mit dem Filterdatenwert übereinstimmt, der in der Filterkonfiguration angegeben ist, gibt dieser Filter true zurück.If the contents of the Action header in the message match the filter data value specified in the filter configuration, then this filter returns true. Das folgende Beispiel definiert eine FilterElement , der den Aktionsfilter verwendet, um Nachrichten mit einer Action-Header entsprechen, die den Wert "http://namespace/contract/operation/" enthält.The following example defines a FilterElement that uses the Action filter to match messages with an action header that contains a value of "http://namespace/contract/operation/".

<filter name="action1" filterType="Action" filterData="http://namespace/contract/operation/" />  
ActionMessageFilter action1 = new ActionMessageFilter(new string[] { "http://namespace/contract/operation" });  

Dieser Filter sollte beim Weiterleiten von Nachrichten verwendet werden, die einen eindeutigen Action-Header enthalten.This filter should be used when routing messages that contain a unique Action header.

EndpointAddressEndpointAddress

Der EndpointAddress-Filter überprüft die EndpointAddress, über die die Nachricht empfangen wurde.The EndpointAddress filter inspects the EndpointAddress that the message was received on. Wenn die Adresse, über die die Nachricht eingeht, genau mit der in der Filterkonfiguration angegebenen Filteradresse übereinstimmt, gibt dieser Filter true zurück.If the address that the message arrives at exactly matches the filter address specified in the filter configuration, then this filter returns true. Das folgende Beispiel definiert eine FilterElement , verwendet den Adressfilter entsprechend alle Nachrichten, die an "http://<Hostname > / vdir/s.svc/b".The following example defines a FilterElement that uses the Address filter to match any messages addressed to "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);  

Hinweis

Beachten Sie dabei, dass sich der Hostnamenteil einer Adresse in Abhängigkeit davon unterscheiden kann, ob der Client den vollqualifizierten Domänennamen, den NetBIOS-Namen, die IP-Adresse oder einen anderen Namen verwendet.It is important to note that the host name portion of an address can differ based on whether the client uses the fully qualified domain name, NetBIOS name, IP address, or other name. Da verschiedene Werte auf den gleichen Host verweisen können, besteht das Standardverhalten für diesen Vergleich nicht darin, beim Ermitteln von Übereinstimmungen den Hostnamenteil der Adresse zu verwenden.Because differing values can refer to the same host, the default behavior for this comparison is to not use the host name portion of the address when performing matches.

Dieses Verhalten kann geändert werden, damit der Vergleich beim programmgesteuerten Konfigurieren des Routingdiensts den Hostnamen auswerten kann.This behavior can be modified to allow the comparison to evaluate the host name when configuring the Routing Service programmatically.

Dieser Filter sollte verwendet werden, wenn die eingehenden Nachrichten an eine eindeutige Adresse adressiert sind.This filter should be used when the incoming messages are addressed to a unique address.

EndpointAddressPrefixEndpointAddressPrefix

Der EndpointAddressPrefix-Filter ähnelt dem EndpointAddress-Filter.The EndpointAddressPrefix filter is similar to the EndpointAddress filter. Der EndpointAddressPrefix-Filter überprüft die EndpointAddress, über die die Nachricht empfangen wurde.The EndpointAddressPrefix filter inspects the EndpointAddress that the message was received on. Der EndpointAddressPrefix-Filter fungiert jedoch als Platzhalter, indem er Übereinstimmungen für Adressen ermittelt, die mit dem in der Filterkonfiguration angegebenen Wert beginnen.However the EndpointAddressPrefix filter acts as a wildcard by matching addresses that begin with the value specified in the filter configuration. Das folgende Beispiel definiert eine FilterElement , verwendet den EndpointAddressPrefix-Filter an alle adressierten entsprechend "http://<Hostname > / Vdir ".The following example defines a FilterElement that uses the EndpointAddressPrefix filter to match any messages addressed to "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);  

Hinweis

Beachten Sie dabei, dass sich der Hostnamenteil einer Adresse in Abhängigkeit davon unterscheiden kann, ob der Client den vollqualifizierten Domänennamen, den NetBIOS-Namen, die IP-Adresse oder einen anderen Namen verwendet.It is important to note that the host name portion of an address can differ based on whether the client uses the fully qualified domain name, NetBIOS name, IP address, or other name. Da verschiedene Werte auf den gleichen Host verweisen können, besteht das Standardverhalten für diesen Vergleich nicht darin, beim Ermitteln von Übereinstimmungen den Hostnamenteil der Adresse zu verwenden.Because differing values can refer to the same host, the default behavior for this comparison is to not use the host name portion of the address when performing matches.

Dieser Filter sollte verwendet werden, wenn eingehende Nachrichten weitergeleitet werden, die über ein gemeinsames Adresspräfix verfügen.This filter should be used when routing incoming messages that share a common address prefix.

UNDAND

Der AND-Filter filtert nicht direkt nach einem Wert innerhalb einer Nachricht, sondern ermöglicht Ihnen die Kombination von zwei anderen Filtern, um eine AND-Bedingung zu erstellen. Dabei müssen beide Filter eine Übereinstimmung mit der Nachricht ergeben, bevor für den AND-Filter true ausgewertet wird.The AND filter does not directly filter on a value within a message, but allows you to combine two other filters to create an AND condition where both filters must match the message before the AND filter evaluates to true. Auf diese Weise können Sie komplexe Filter erstellen, die nur dann Übereinstimmungen ergeben, wenn alle Unterfilter zu Übereinstimmungen führen.This allows you to create complex filters that only match if all the sub-filters match. Im folgenden Beispiel werden ein Adressfilter und ein Aktionsfilter definiert. Anschließend wird ein AND-Filter definiert, der eine Nachricht sowohl für den Adressfilter als auch für den Aktionsfilter auswertet.The following example defines an address filter and an action filter, and then defines an AND filter that evaluates a message against both the address and action filters. Falls der Adressfilter und der Aktionsfilter zu Übereinstimmungen führen, gibt der AND-Filter true zurück.If both the address and the action filters match, then the AND filter returns 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);  

Dieser Filter sollte verwendet werden, wenn Sie die Logik mehrerer Filter kombinieren müssen, um festzulegen, wann eine Übereinstimmung erzielt werden soll.This filter should be used when you must combine the logic from multiple filters to determine when a match should be made. Wenn Sie z. B. über mehrere Ziele verfügen, die nur bestimmte Kombinationen von Aktionen und Nachrichten unter bestimmten Adressen empfangen dürfen, können Sie die erforderlichen Aktions- und Adressfilter mithilfe eines AND-Filters kombinieren.For example, if you have multiple destinations that must receive only certain combinations of actions and messages to particular addresses, you can use an AND filter to combine the necessary Action and Address filters.

BenutzerdefiniertCustom

Wenn Sie den benutzerdefinierten Filtertyp auswählen, geben Sie einen CustomType-Wert, der den Typ der Assembly enthält, die MessageFilter Implementierung, die für diesen Filter verwendet werden.When selecting the Custom filter type, you must provide a customType value that contains the type of the assembly that contains the MessageFilter implementation to be used for this filter. Außerdem muss "filterData" alle Werte enthalten, die der benutzerdefinierte Filter beim Auswerten der Nachrichten ggf. erfordert.Additionally, filterData must contain any values that the custom filter may require in its evaluation of messages. Im folgenden Beispiel wird ein FilterElement definiert, dass die CustomAssembly.MyCustomMsgFilter-MessageFilter-Implementierung verwendet.The following example defines a FilterElement that uses the CustomAssembly.MyCustomMsgFilter MessageFilter implementation.

<filter name="custom1" filterType="Custom" customType="CustomAssembly.MyCustomMsgFilter, CustomAssembly" filterData="Custom Data" />  
MyCustomMsgFilter custom1=new MyCustomMsgFilter("Custom Data");  

Wenn Sie benutzerdefinierte Übereinstimmungslogik auf eine Nachricht ausführen, die durch die bereitgestellten Filtern abgedeckt werden müssen .NET Framework 4.6.1.NET Framework 4.6.1, müssen Sie einen benutzerdefinierten Filter, die Implementierung des Erstellen der MessageFilter Klasse.If you need to perform custom matching logic against a message that is not covered by the filters provided with .NET Framework 4.6.1.NET Framework 4.6.1, you must create a custom filter that is an implementation of the MessageFilter class. Sie können z. B. einen benutzerdefinierten Filter erstellen, der ein Feld in der eingehenden Nachricht mit einer Liste bekannter Werte vergleicht, die dem Filter als Konfiguration vorliegen. Oder Sie können einen Filter erstellen, der den Hashwert für ein bestimmtes Nachrichtenelement generiert und diesen Wert dann untersucht und angibt, ob der Filter true oder false zurückgeben soll.For example, you might create a custom filter that compares a field in the incoming message against a list of known values given to the filter as configuration, or that hashes a particular message element and then examines that value to determine whether the filter should return true or false.

EndpointNameEndpointName

Der EndpointName-Filter überprüft den Namen des Endpunkts, der die Nachricht empfangen hat.The EndpointName filter inspects the name of the endpoint that received the message. Das folgende Beispiel definiert eine FilterElement , verwendet den EndpointName-Filter zum Weiterleiten von Nachrichten an die "SvcEndpoint" empfangen.The following example defines a FilterElement that uses the EndpointName filter to route messages received on the "SvcEndpoint".

<filter name="name1" filterType="Endpoint" filterData="SvcEndpoint" />  
EndpointNameMessageFilter name1 = new EndpointNameMessageFilter("SvcEndpoint");  

Dieser Filter ist nützlich, wenn der Routingdienst mehr als einen benannten Dienstendpunkt verfügbar macht.This filter is useful when the Routing Service exposes more than one named service endpoint. Sie können z. B. zwei Endpunkte verfügbar machen, die der Routingdienst zum Empfangen von Nachrichten verwendet. Einer wird von Prioritätskunden verwendet, die eine Echtzeitverarbeitung ihrer Nachrichten benötigen, während der andere Endpunkt Nachrichten empfängt, die nicht eilig sind.For example, you might expose two endpoints that the Routing Service uses to receive messages; one is used by priority customers who require real-time processing of their messages, while the other endpoint receives messages that are not time sensitive.

Sie können zwar häufig die Übereinstimmungsprüfung für vollständige Adressen verwenden, um zu ermitteln, über welchen Endpunkt eine Nachricht empfangen wurde, aber die Verwendung des definierten Endpunktnamens stellt eine einfache Alternative dar, die oft weniger fehleranfällig ist. Dies gilt besonders beim Konfigurieren eines Routingdiensts mithilfe einer Konfigurationsdatei (bei denen Endpunktnamen ein erforderliches Attribut darstellen).While you can often use full address matching to determine which endpoint a message was received on, using the defined endpoint name instead is a convenient shortcut that is often less error prone, especially when configuring a Routing Service using a configuration file (where endpoint names are a required attribute).

MatchAllMatchAll

Der MatchAll-Filter ergibt für alle empfangenen Nachrichten Übereinstimmungen.The MatchAll filter matches any received message. Dies ist nützlich, wenn Sie alle empfangenen Nachrichten immer an einen bestimmten Endpunkt weiterleiten müssen, z. B. bei einem Protokollierungsdienst, der eine Kopie jeder empfangenen Nachricht speichert.It is useful if you must always route all received messages to a specific endpoint, such as a logging service that stores a copy of all received messages. Im folgenden Beispiel wird ein FilterElement definiert, das den MatchAll-Filter verwendet.The following example defines a FilterElement that uses the MatchAll filter.

<filter name="matchAll1" filterType="MatchAll" />  
MatchAllMessageFilter matchAll1 = new MatchAllMessageFilter();  

XPathXPath

Mit dem XPath-Filter können Sie eine XPath-Abfrage angeben, die verwendet wird, um ein bestimmtes Element innerhalb der Nachricht zu überprüfen.The XPath filter allows you to specify an XPath query that is used to inspect a specific element within the message. Die XPath-Filterung ist eine leistungsstarke Filteroption, mit der Sie jeden per XML-Adressierung erreichbaren Eintrag in der Nachricht direkt untersuchen können. Dafür ist es jedoch erforderlich, dass Sie über genaue Kenntnisse der Struktur der Nachrichten verfügen, die Sie empfangen.XPath filtering is a powerful filtering option that allows you to directly inspect any XML addressable entry within the message; however it requires that you have specific knowledge of the structure of the messages that you are receiving. Das folgende Beispiel definiert eine FilterElement , die den XPath-Filter verwendet, überprüfen Sie die Nachricht nach einem Element mit dem Namen "Element" innerhalb des Namespaces, die mit dem Namespacepräfix "ns" verwiesen wird.The following example defines a FilterElement that uses the XPath filter to inspect the message for an element named "element" within the namespace referenced by the "ns" namespace prefix.

<filter name="xpath1" filterType="XPath" filterData="//ns:element" />  
XPathMessageFilter xpath1=new XPathMessageFilter("//ns:element");  

Dieser Filter ist nützlich, wenn Sie wissen, dass die empfangenen Nachrichten einen bestimmten Wert enthalten.This filter is useful if you know that the messages you are receiving contain a specific value. Wenn Sie beispielsweise zwei Versionen des gleichen Diensts hosten und wissen, dass an die neuere Version des Diensts adressierte Nachrichten in einem benutzerdefinierten Header einen eindeutigen Wert enthalten, können Sie einen speziellen Filter erstellen. Der Filter verwendet XPath zum Navigieren zu diesem Header und vergleicht den im Header enthaltenen Wert mit einem anderen Wert in der Filterkonfiguration, um zu bestimmen, ob der Filter eine Übereinstimmung ergibt.For example, if you are hosting two versions of the same service and you know that messages addressed to the newer version of the service contain a unique value in a custom header, you can create a filter that uses XPath to navigate to this header and compares the value present in the header to another given in the filter configuration to determine if the filter matches.

Da XPath-Abfragen häufig eindeutige Namespaces enthalten, bei denen es sich oft um lange oder komplexe Zeichenfolgenwerte handelt, können Sie mit dem XPath-Filter die Namespacetabelle zum Definieren eindeutiger Präfixe für die Namespaces verwenden.Because XPath queries often contain unique namespaces, which are often lengthy or complex string values, the XPath filter allows you to use the namespace table to define unique prefixes for your namespaces. Weitere Informationen finden Sie unterFor more information aboutdie namespacetabelle finden Sie unter Nachrichtenfilter. the namespace table, see Message Filters.

Weitere Informationen finden Sie unterFor more information aboutEntwerfen der XPath-Abfragen finden Sie unter XPath-Syntax. designing XPath queries, see XPath Syntax.

Siehe auchSee Also

NachrichtenfilterMessage Filters
Vorgehensweise: Verwenden von FilternHow To: Use Filters