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.
Il servizio di routing è un intermediario SOAP generico che funge da router di messaggi. La funzionalità principale del servizio di routing è la possibilità di instradare i messaggi in base al contenuto del messaggio, che consente l'inoltro di un messaggio a un endpoint client in base a un valore all'interno del messaggio stesso, nell'intestazione o nel corpo del messaggio.
L'oggetto RoutingService viene implementato come servizio di Windows Communication Foundation (WCF) nello spazio dei nomi System.ServiceModel.Routing. Il servizio di routing espone uno o più endpoint di servizio che ricevono messaggi e quindi instrada ogni messaggio a uno o più endpoint client in base al contenuto del messaggio. Il servizio offre le funzionalità seguenti:
Routing basato sul contenuto
Aggregazione dei servizi
Controllo delle versioni del servizio
Routing prioritario
Configurazione dinamica
Collegamento del protocollo
Elaborazione SOAP
Gestione avanzata degli errori
Endpoint di backup
Sebbene sia possibile creare un servizio intermedio che raggiunge uno o più di questi obiettivi, spesso tale implementazione è legata a uno scenario o a una soluzione specifica e non può essere facilmente applicata alle nuove applicazioni.
Il servizio di routing fornisce un intermediario SOAP generico configurabile in modo dinamico e collegabile compatibile con i modelli di servizio e canale WCF e consente di eseguire il routing basato sul contenuto dei messaggi basati su SOAP.
Annotazioni
Il servizio di routing attualmente non supporta il routing dei servizi REST WCF. Per instradare le chiamate REST, prendere in considerazione l'uso System.Web.Routing o Application Request Routing.
Routing basato sul contenuto
Il routing basato sul contenuto è la possibilità di instradare un messaggio in base a uno o più valori contenuti nel messaggio. Il servizio di routing esamina ogni messaggio e lo instrada all'endpoint di destinazione in base al contenuto del messaggio e alla logica di routing creata. Il routing basato sul contenuto fornisce la base per l'aggregazione del servizio, il controllo delle versioni del servizio e il routing prioritario.
Per implementare il routing basato sul contenuto, il servizio di routing si basa sulle MessageFilter implementazioni usate per trovare le corrispondenze con valori specifici all'interno dei messaggi da instradare. Se messageFilter corrisponde a un messaggio, il messaggio viene indirizzato all'endpoint di destinazione associato a MessageFilter. I filtri dei messaggi vengono raggruppati in tabelle di filtro (FilterTableCollection) per costruire una logica di routing complessa. Ad esempio, una tabella di filtro può contenere cinque filtri di messaggi mutuamente esclusivi che instradano i messaggi verso uno solo dei cinque endpoint di destinazione.
Il servizio di routing consente di configurare la logica usata per eseguire il routing basato sul contenuto, nonché di aggiornare dinamicamente la logica di routing in fase di esecuzione.
Tramite il raggruppamento dei filtri dei messaggi in tabelle di filtro, è possibile costruire la logica di routing che consente di gestire più scenari di routing, ad esempio:
Aggregazione dei servizi
Controllo delle versioni del servizio
Routing prioritario
Configurazione dinamica
Per altre informazioni sui filtri dei messaggi e sulle tabelle di filtro, vedere Introduzione al routing e Filtri messaggi.
Aggregazione dei servizi
Usando il routing basato sul contenuto, è possibile esporre un endpoint che riceve messaggi da applicazioni client esterne e quindi instrada ogni messaggio all'endpoint interno appropriato in base a un valore all'interno del messaggio. Ciò è utile per offrire un endpoint specifico per un'ampia gamma di applicazioni back-end e anche per presentare un endpoint dell'applicazione ai clienti durante il factoring dell'applicazione in un'ampia gamma di servizi.
Controllo delle versioni del servizio
Quando si esegue la migrazione a una nuova versione della soluzione, potrebbe essere necessario mantenere la versione precedente in parallelo per gestire i clienti esistenti. Spesso ciò richiede che i client che si connettono alla versione più recente usino un indirizzo diverso durante la comunicazione con la soluzione. Il servizio di routing consente di esporre un endpoint di servizio che gestisce entrambe le versioni della soluzione instradando i messaggi alla soluzione appropriata in base alle informazioni specifiche della versione contenute nel messaggio. Per un esempio di implementazione di questo tipo, vedere Procedura: Controllo delle versioni del servizio.
Instradamento prioritario
Quando si fornisce un servizio per più client, è possibile che si disponga di un contratto di servizio con alcuni partner che richiedono l'elaborazione di tutti i dati di questi partner separatamente da quello di altri client. Usando un filtro che cerca informazioni specifiche del cliente contenute nel messaggio, è possibile instradare facilmente i messaggi da partner specifici a un endpoint creato per soddisfare i requisiti del contratto di servizio.
Configurazione dinamica
Per supportare sistemi cruciali, in cui i messaggi devono essere elaborati senza interruzioni del servizio, è fondamentale poter modificare la configurazione dei componenti all'interno del sistema in fase di esecuzione. Per supportare questa esigenza, il servizio di routing fornisce un'implementazione IExtension<T> , RoutingExtensionche consente l'aggiornamento dinamico della configurazione del servizio di routing in fase di esecuzione.
Per altre informazioni sulla configurazione dinamica del servizio di routing, vedere Introduzione al routing.
Integrazione del protocollo
Uno dei problemi negli scenari intermedi è che gli endpoint interni possono avere requisiti di versione SOAP o di trasporto diversi rispetto all'endpoint in cui vengono ricevuti i messaggi. Per supportare questo scenario, il servizio di routing può collegare i protocolli, inclusa l'elaborazione del messaggio SOAP all'oggetto MessageVersion richiesto dagli endpoint di destinazione. In questo modo, un protocollo può essere usato per la comunicazione interna, mentre un altro può essere usato per la comunicazione esterna.
Per supportare il routing dei messaggi tra endpoint con trasporti diversi, il servizio di routing usa associazioni fornite dal sistema che consentono al servizio di bridge protocolli diversi. Ciò si verifica automaticamente quando l'endpoint di servizio esposto dal servizio di routing usa un protocollo diverso rispetto agli endpoint client a cui vengono indirizzati i messaggi.
Elaborazione SOAP
Un requisito di routing comune è la possibilità di instradare i messaggi tra endpoint con requisiti SOAP diversi. Per supportare questo requisito, il servizio di routing fornisce un oggetto SoapProcessingBehavior che crea automaticamente un nuovo MessageVersion che soddisfa i requisiti dell'endpoint di destinazione prima che il messaggio venga indirizzato. Questo comportamento crea anche un nuovo MessageVersion per qualsiasi messaggio di risposta prima di restituirlo all'applicazione client richiedente, per assicurarsi che MessageVersion della risposta corrisponda a quello della richiesta originale.
Per altre informazioni sull'elaborazione SOAP, vedere Introduzione al routing.
Gestione degli errori
In un sistema composto da servizi distribuiti che si basano sulle comunicazioni di rete, è importante assicurarsi che le comunicazioni all'interno del sistema siano resistenti agli errori di rete temporanei. Il servizio di routing implementa la gestione degli errori che consente di gestire molti scenari di errore di comunicazione che potrebbero altrimenti causare un'interruzione del servizio.
Se il servizio di routing incontra un CommunicationException mentre tenta di inviare un messaggio, verrà eseguita la gestione degli errori. Queste eccezioni indicano in genere che si è verificato un problema durante il tentativo di comunicare con l'endpoint client definito, ad esempio EndpointNotFoundException, ServerTooBusyExceptiono CommunicationObjectFaultedException. Il codice di gestione degli errori intercetta e tenterà anche di riprovare a inviare quando si verifica un'eccezione TimeoutException , un'altra eccezione comune non derivata da CommunicationException.
Per altre informazioni sulla gestione degli errori, vedere Introduzione al routing.
Endpoint di backup
Oltre agli endpoint client di destinazione associati a ogni definizione di filtro nella tabella dei filtri, è anche possibile creare un elenco di endpoint di backup a cui verrà instradato il messaggio in caso di errore di trasmissione. Se si verifica un errore e viene definito un elenco di backup per la voce di filtro, il servizio di routing tenterà di inviare il messaggio al primo endpoint definito nell'elenco. Se il tentativo di trasmissione non riesce, il servizio tenterà l'endpoint successivo e continuerà questo processo fino a quando il tentativo di trasmissione non riesce, restituisce un errore non correlato alla trasmissione o tutti gli endpoint nell'elenco di backup hanno restituito un errore di trasmissione.
Per altre informazioni sugli endpoint di backup, vedere Introduzione al routing e Filtri messaggi.
Trasmissione in diretta
Il servizio di routing può trasmettere correttamente i messaggi se si imposta l'associazione per supportare lo streaming. Esistono tuttavia alcune condizioni in cui potrebbe essere necessario memorizzare nel buffer i messaggi:
Multicast (buffer per creare copie di messaggi aggiuntive)
Failover (buffer nel caso in cui il messaggio debba essere inviato a un backup)
System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly è false (buffer per presentare MessageFilterTable con MessageBuffer in modo che i filtri possano ispezionare il corpo)
Configurazione dinamica