Scelta di un filtroChoosing a Filter

Quando si configura il servizio di routing, è importante selezionare i filtri messaggi corretti e configurarli per consentire l'individuazione di corrispondenze esatte con i messaggi ricevuti.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. Se i filtri selezionati non sono sufficientemente precisi o non sono configurati correttamente, i messaggi vengono indirizzati in modo non corretto.If the filters you select are overly broad in their matches or are incorrectly configured, messages are routed incorrectly. Se i filtri sono troppo restrittivi, è possibile che non vengano individuate route valide disponibili per alcuni messaggi.If the filters are too restrictive, you may not have any valid routes available for some of your messages.

Tipo di filtroFilter Types

Se si selezionano filtri utilizzati dal servizio di routing, è importante comprenderne il funzionamento ed essere a conoscenza delle informazioni disponibili all'interno dei messaggi in ingresso.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. Se ad esempio tutti i messaggi vengono ricevuti sullo stesso endpoint, i filtri Address e EndpointName non sono utili perché tutti i messaggi corrispondono a questi filtri.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.

OperazioneAction

Il filtro Action controlla la proprietà Action.The Action filter inspects the Action property. Se il contenuto dell'intestazione Action nel messaggio corrisponde al valore dei dati specificato nella configurazione del filtro, viene restituito true.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. L'esempio seguente definisce una FilterElement che utilizza il filtro Action per individuare i messaggi con un'intestazione action che contiene un valore di "http://namespace/contract/operation/".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" });  

Questo filtro deve essere utilizzato per il routing dei messaggi contenenti un'intestazione Action univoca.This filter should be used when routing messages that contain a unique Action header.

EndpointAddressEndpointAddress

Il filtro EndpointAddress controlla il valore EndpointAddress indicante l'indirizzo di ricezione del messaggio.The EndpointAddress filter inspects the EndpointAddress that the message was received on. Se l'indirizzo a cui arriva il messaggio corrisponde esattamente all'indirizzo specificato nella configurazione del filtro, quest'ultimo restituisce true.If the address that the message arrives at exactly matches the filter address specified in the filter configuration, then this filter returns true. L'esempio seguente definisce un FilterElement che utilizza il filtro dell'indirizzo per individuare i messaggi indirizzati a "http://<nome host > / 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);  

Nota

È importante notare che la parte del nome host di un indirizzo può differire a seconda che il client utilizzi il nome di dominio completo, il nome NetBIOS, l'indirizzo IP o un altro nome.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. Poiché valori diversi possono fare riferimento allo stesso host, il comportamento predefinito per questo confronto non prevede l'utilizzo della parte del nome host dell'indirizzo per individuare le corrispondenze.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.

È possibile modificare questo comportamento per consentire la valutazione del nome host nel confronto quando si configura il servizio di routing a livello di codice.This behavior can be modified to allow the comparison to evaluate the host name when configuring the Routing Service programmatically.

È consigliabile utilizzare questo filtro quando i messaggi in ingresso vengono indirizzati a un indirizzo univoco.This filter should be used when the incoming messages are addressed to a unique address.

EndpointAddressPrefixEndpointAddressPrefix

Il filtro EndpointAddressPrefix è analogo al filtro EndpointAddress.The EndpointAddressPrefix filter is similar to the EndpointAddress filter. Il filtro EndpointAddressPrefix controlla il valore EndpointAddress indicante l'indirizzo di ricezione del messaggio.The EndpointAddressPrefix filter inspects the EndpointAddress that the message was received on. Tuttavia, il filtro EndpointAddressPrefix viene utilizzato come un carattere jolly che individua le corrispondenze con gli indirizzi che iniziano con il valore specificato nella configurazione del filtro.However the EndpointAddressPrefix filter acts as a wildcard by matching addresses that begin with the value specified in the filter configuration. L'esempio seguente definisce un FilterElement che utilizza il filtro EndpointAddressPrefix per individuare i messaggi indirizzati a "http://<nome host > / 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);  

Nota

È importante notare che la parte del nome host di un indirizzo può differire a seconda che il client utilizzi il nome di dominio completo, il nome NetBIOS, l'indirizzo IP o un altro nome.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. Poiché valori diversi possono fare riferimento allo stesso host, il comportamento predefinito per questo confronto non prevede l'utilizzo della parte del nome host dell'indirizzo per individuare le corrispondenze.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.

È consigliabile utilizzare questo filtro per il routing dei messaggi in ingresso che condividono un prefisso di indirizzo comune.This filter should be used when routing incoming messages that share a common address prefix.

ANDAND

Il filtro AND non applica direttamente il filtro in base a un valore all'interno di un messaggio, ma consente di combinare due altri filtri per creare una condizione AND in cui entrambi i filtri devono corrispondere al messaggio affinché venga restituito true.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. In questo modo è possibile creare filtri complessi che prevedono la corrispondenza dei messaggi con tutti i sottofiltri.This allows you to create complex filters that only match if all the sub-filters match. Nell'esempio seguente vengono definiti un filtro indirizzo e un filtro Action, quindi viene definito un filtro AND che valuta un messaggio in base sia al filtro indirizzo sia a quello azione.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. Se entrambi i filtri corrispondono, il filtro AND restituisce true.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);  

È consigliabile utilizzare questo filtro quando è necessario combinare la logica di più filtri per determinare quando si verifica una corrispondenza.This filter should be used when you must combine the logic from multiple filters to determine when a match should be made. Se ad esempio si dispone di più destinazioni che devono ricevere solo determinate combinazioni di azioni e messaggi a specifici indirizzi, è possibile utilizzare un filtro AND per combinare i filtri indirizzo e azione necessari.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.

Custom (Personalizzati)Custom

Quando si seleziona il tipo di filtro personalizzato, è necessario fornire un valore customType contenente il tipo dell'assembly che contiene il MessageFilter implementazione da usare per il filtro.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. Inoltre, filterData deve contenere qualsiasi valore necessario per la valutazione dei messaggi da parte del filtro personalizzato.Additionally, filterData must contain any values that the custom filter may require in its evaluation of messages. Nell'esempio seguente viene definito un elemento FilterElement che utilizza l'implementazione di MessageFilter CustomAssembly.MyCustomMsgFilter.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");  

Se è necessario eseguire la logica di corrispondenza personalizzata rispetto a un messaggio che non rientrano i filtri forniti con .NET Framework 4.6.1.NET Framework 4.6.1, è necessario creare un filtro personalizzato che è un'implementazione del MessageFilter classe.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. È ad esempio possibile creare un filtro personalizzato che confronta un campo nel messaggio in ingresso rispetto a un elenco di valori noti specificato nella configurazione del filtro o che esegue l'hashing di un messaggio e quindi esamina il valore per determinare se il filtro deve restituire true o false.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

Il filtro EndpointName controlla il nome dell'endpoint che ha ricevuto il messaggio.The EndpointName filter inspects the name of the endpoint that received the message. L'esempio seguente definisce un FilterElement che utilizza il filtro EndpointName per instradare i messaggi ricevuti su "SvcEndpoint".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");  

Questo filtro è utile quando il servizio di routing espone più endpoint servizio denominati.This filter is useful when the Routing Service exposes more than one named service endpoint. È ad esempio possibile esporre due endpoint che il servizio di routing utilizza per ricevere messaggi; uno per i clienti prioritari per i quali è necessaria elaborazione in tempo reale dei messaggi, l'altro per la ricezione dei messaggi non dipendenti dal tempo.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.

Sebbene sia spesso possibile utilizzare la corrispondenza dell'indirizzo completa per determinare l'endpoint di ricezione di un messaggio, l'utilizzo del nome dell'endpoint risulta più pratico ed è meno soggetto a errori, in particolare quando si configura un servizio di routing con un file di configurazione (in cui i nomi degli endpoint sono un attributo obbligatorio).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

Il filtro MatchAll corrisponde a tutti i messaggi ricevuti.The MatchAll filter matches any received message. È utile se è necessario indirizzare sempre tutti i messaggi ricevuti a un endpoint specifico, ad esempio un servizio di registrazione che archivia una copia di tutti i messaggi ricevuti.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. Nell'esempio seguente viene definito un elemento FilterElement che utilizza il filtro MatchAll.The following example defines a FilterElement that uses the MatchAll filter.

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

XPathXPath

Il filtro XPath consente di specificare una query XPath utilizzata per controllare un elemento specifico all'interno del messaggio.The XPath filter allows you to specify an XPath query that is used to inspect a specific element within the message. L'applicazione di filtri XPath rappresenta un'opzione particolarmente efficace per consentire il controllo diretto di qualsiasi voce indirizzabile XML nel messaggio, tuttavia richiede una conoscenza specifica della struttura dei messaggi in ricezione.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. L'esempio seguente definisce un FilterElement che utilizza il filtro XPath per controllare il messaggio per un elemento denominato "element" nello spazio dei nomi a cui fa riferimento il prefisso dello spazio dei nomi "ns".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");  

Questo filtro è utile se si è certi che i messaggi in ricezione contengono un determinato valore.This filter is useful if you know that the messages you are receiving contain a specific value. Se ad esempio si ospitano due versioni dello stesso servizio e si sa che messaggi indirizzati alla versione più recente del servizio contengono un valore univoco in un'intestazione personalizzata, è possibile creare un filtro che utilizza XPath per passare a questa intestazione e confrontare il valore presente nell'intestazione con un altro specificato nella configurazione del filtro per determinare le corrispondenze.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.

Poiché le query XPath spesso contengono spazi dei nomi univoci, che spesso sono valori stringa lunghi o complessi, il filtro XPath consente di utilizzare la tabella degli spazi dei nomi per definire prefissi univoci per gli spazi dei nomi.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. Per ulteriori informazioni sulla tabella dello spazio dei nomi, vedere filtri dei messaggi.For more information about the namespace table, see Message Filters.

Per ulteriori informazioni sulla progettazione di query XPath, vedere sintassi XPath.For more information about designing XPath queries, see XPath Syntax.

Vedere ancheSee Also

Filtri per messaggiMessage Filters
Procedura: Usare filtriHow To: Use Filters