Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quando si configura il servizio di routing, è importante selezionare i filtri messaggi corretti e configurarli per consentire di stabilire corrispondenze esatte rispetto ai messaggi ricevuti. Se i filtri selezionati sono eccessivamente ampi nelle corrispondenze o non sono configurati correttamente, i messaggi vengono instradati in modo errato. Se i filtri sono troppo restrittivi, potrebbero non essere disponibili route valide per alcuni messaggi.
Tipi di filtro
Quando si selezionano i filtri usati dal servizio di routing, è importante comprendere il funzionamento di ogni filtro e quali informazioni sono disponibili come parte dei messaggi in arrivo. Ad esempio, se tutti i messaggi vengono ricevuti sullo stesso endpoint, i filtri Address e EndpointName non sono utili perché tutti i messaggi corrispondono a questi filtri.
Azione
Il filtro Azione controlla la Action proprietà . Se il contenuto dell'intestazione Azione nel messaggio corrisponde al valore dei dati del filtro specificato nella configurazione del filtro, questo filtro restituisce true. Nell'esempio seguente viene definito un FilterElement oggetto che usa il filtro Azione per trovare una corrispondenza con i messaggi con un'intestazione di azione che contiene un valore di 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 usato quando si instradano messaggi che contengono un'intestazione azione univoca.
Indirizzo di Endpoint
Il filtro EndpointAddress controlla l'endpointAddress in cui è stato ricevuto il messaggio. Se l'indirizzo che il messaggio arriva esattamente corrisponde all'indirizzo del filtro specificato nella configurazione del filtro, questo filtro restituisce true. Nell'esempio seguente viene definito un FilterElement che usa il filtro Address per trovare la corrispondenza con qualsiasi messaggio indirizzato a "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);
Annotazioni
È importante notare che la parte del nome host di un indirizzo può differire in base al fatto che il client usi il nome di dominio completo, il nome NetBIOS, l'indirizzo IP o un altro nome. Poiché i valori diversi possono fare riferimento allo stesso host, il comportamento predefinito per questo confronto consiste nell'non usare la parte del nome host dell'indirizzo quando si eseguono corrispondenze.
Questo comportamento può essere modificato per consentire al confronto di valutare il nome host durante la configurazione del servizio di routing a livello di codice.
Questo filtro deve essere usato quando i messaggi in arrivo vengono indirizzati a un indirizzo univoco.
EndpointAddressPrefix
Il filtro EndpointAddressPrefix è simile al filtro EndpointAddress. Il filtro EndpointAddressPrefix controlla l'endpointAddress in cui è stato ricevuto il messaggio. Tuttavia, il filtro EndpointAddressPrefix funge da carattere jolly associando gli indirizzi che iniziano con il valore specificato nella configurazione del filtro. Nell'esempio seguente viene definito un FilterElement oggetto che usa il filtro EndpointAddressPrefix per trovare la corrispondenza con tutti i messaggi indirizzati a 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);
Annotazioni
È importante notare che la parte del nome host di un indirizzo può differire in base al fatto che il client usi il nome di dominio completo, il nome NetBIOS, l'indirizzo IP o un altro nome. Poiché i valori diversi possono fare riferimento allo stesso host, il comportamento predefinito per questo confronto consiste nell'non usare la parte del nome host dell'indirizzo quando si eseguono corrispondenze.
Questo filtro deve essere usato quando si instradano messaggi in ingresso che condividono un prefisso di indirizzo comune.
E
Il filtro AND non filtra direttamente un valore all'interno di un messaggio, ma consente di combinare altri due filtri per creare una AND condizione in cui entrambi i filtri devono corrispondere al messaggio prima che il filtro AND restituisca true. In questo modo è possibile creare filtri complessi che corrispondono solo se tutti i filtri secondari corrispondono. L'esempio seguente definisce un filtro di indirizzo e un filtro azione e quindi definisce un filtro AND che valuta un messaggio rispetto ai filtri indirizzo e azione. Se l'indirizzo e i filtri azione corrispondono, il filtro AND restituisce 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);
Questo filtro deve essere usato quando è necessario combinare la logica da più filtri per determinare quando deve essere eseguita una corrispondenza. Ad esempio, se si dispone di più destinazioni che devono ricevere solo determinate combinazioni di azioni e messaggi a indirizzi specifici, è possibile usare un filtro AND per combinare i filtri Azione e Indirizzo necessari.
Personalizzato
Quando si seleziona il tipo di filtro personalizzato, è necessario specificare un valore customType contenente il tipo di assembly che contiene l'implementazione messageFilter da utilizzare per questo filtro. Inoltre, filterData deve contenere tutti i valori che il filtro personalizzato può richiedere nella valutazione dei messaggi. Nell'esempio seguente viene definito un oggetto FilterElement che usa l'implementazione CustomAssembly.MyCustomMsgFilter di MessageFilter.
<filter name="custom1" filterType="Custom" customType="CustomAssembly.MyCustomMsgFilter, CustomAssembly" filterData="Custom Data" />
MyCustomMsgFilter custom1=new MyCustomMsgFilter("Custom Data");
Se è necessario eseguire logica di corrispondenza personalizzata su un messaggio non coperto dai filtri forniti con .NET Framework 4.6.1, è necessario creare un filtro personalizzato che sia un'implementazione della classe MessageFilter . Ad esempio, è possibile creare un filtro personalizzato che confronta un campo nel messaggio in arrivo con un elenco di valori noti forniti al filtro come configurazione o che esegue l'hashing di un particolare elemento del messaggio e quindi esamina tale valore per determinare se il filtro deve restituire true o false.
Nome dell'Endpoint
Il filtro EndpointName controlla il nome dell'endpoint che ha ricevuto il messaggio. Nell'esempio seguente viene definito un FilterElement oggetto che usa il filtro EndpointName per instradare i messaggi ricevuti in "SvcEndpoint".
<filter name="name1" filterType="Endpoint" filterData="SvcEndpoint" />
EndpointNameMessageFilter name1 = new EndpointNameMessageFilter("SvcEndpoint");
Questo filtro è utile quando il servizio di routing espone più di un endpoint di servizio denominato. Ad esempio, è possibile esporre due endpoint usati dal servizio di routing per ricevere messaggi; uno viene usato dai clienti prioritari che richiedono l'elaborazione in tempo reale dei messaggi, mentre l'altro endpoint riceve messaggi che non sono sensibili al tempo.
Anche se spesso è possibile utilizzare la corrispondenza degli indirizzi completi per determinare su quale endpoint è stato ricevuto un messaggio, l'uso del nome dell'endpoint definito rappresenta una scorciatoia pratica che risulta spesso meno soggetta a errori. Questo è particolarmente vero quando si configura un servizio di routing tramite un file di configurazione, dove i nomi degli endpoint sono un attributo obbligatorio.
MatchAll
Il filtro MatchAll corrisponde a qualsiasi messaggio ricevuto. È utile se è necessario instradare sempre tutti i messaggi ricevuti a un endpoint specifico, ad esempio un servizio di registrazione che archivia una copia di tutti i messaggi ricevuti. Nell'esempio seguente viene definito un oggetto FilterElement che usa il filtro MatchAll.
<filter name="matchAll1" filterType="MatchAll" />
MatchAllMessageFilter matchAll1 = new MatchAllMessageFilter();
XPath
Il filtro XPath consente di specificare una query XPath usata per esaminare un elemento specifico all'interno del messaggio. Il filtro XPath è una potente opzione di filtro che consente di controllare direttamente qualsiasi voce indirizzabile XML all'interno del messaggio; tuttavia richiede una conoscenza specifica della struttura dei messaggi ricevuti. Nell'esempio seguente viene definito un FilterElement oggetto che usa il filtro XPath per esaminare il messaggio in cerca di un elemento denominato "element" all'interno dello spazio dei nomi a cui si fa riferimento con il prefisso "ns".
<filter name="xpath1" filterType="XPath" filterData="//ns:element" />
XPathMessageFilter xpath1=new XPathMessageFilter("//ns:element");
Questo filtro è utile se si sa che i messaggi ricevuti contengono un valore specifico. Ad esempio, se si ospitano due versioni dello stesso servizio e si sa che i messaggi indirizzati alla versione più recente del servizio contengono un valore univoco in un'intestazione personalizzata, è possibile creare un filtro che usa XPath per passare a questa intestazione e confrontare il valore presente nell'intestazione con un altro dato nella configurazione del filtro per determinare se il filtro corrisponde.
Poiché le query XPath contengono spesso spazi dei nomi univoci, che spesso sono valori di stringa lunghi o complessi, il filtro XPath consente di usare la tabella dello spazio dei nomi per definire prefissi univoci per gli spazi dei nomi. Per ulteriori informazioni sulla tabella dello spazio dei nomi, consultare Filtri messaggi.
Per altre informazioni sulla progettazione di query XPath, vedere Sintassi XPath.