Router WCF basato su regole

Un router SOAP è un intermediario che inoltra messaggi SOAP da un client a un endpoint dell'applicazione sulla base di un set di regole. Questo esempio crea un router SOAP utilizzando Windows Communication Foundation (WCF).

Nota

Per poter essere generato ed eseguito, l'esempio richiede che sia installato .NET Framework versione 3.5. Per aprire il progetto e i file della soluzione è necessario Visual Studio 2008.

Il router utilizza il motore di regole Windows Workflow Foundation (WF) per implementare le sue funzionalità principali e determinare dove inoltrare un messaggio specificato. Questo esempio illustra due concetti fondamentali, ovvero come è possibile utilizzare Windows Workflow Foundation e WCF insieme in un'applicazione e come è possibile utilizzare il motore delle regole di Windows Workflow Foundation al di fuori di un flusso di lavoro, in un modo definito anche "autonomo".

Nota

Per visualizzare le regole è possibile utilizzare Esempio di toolkit di RuleSet esterno.

Nota

Per approfondire gli aspetti del router WCF, fare riferimento alla documentazione per l'esempio WCF Intermediary Router. In questo esempio vengono sostituite le funzionalità del router nell'esempio Intermediary Router con altre funzionalità basate su regole.

L'esempio è costituito da quattro progetti: un servizio di calcolatrice, un servizio eco, un router e un client. In questo esempio, i servizi di calcolatrice ed eco sono servizi WCF standard e sono definiti rispettivamente nei file Calculator.cs e EchoService.cs.

Il servizio del router utilizza l'estendibilità di WCF per elaborare messaggi e altri comportamenti, ad esempio la gestione dei pattern di trasporto (datagramma/sessione, richiesta-risposta/duplex).

Il file di origine RouterTable.cs definisce la classe che utilizza il motore delle regole WF per decidere dove inoltrare il messaggio ricevuto dal client. Poiché ogni messaggio viene elaborato dal router, esso chiama RouterTable.SelectDestination() per ottenere un indirizzo endpoint al quale inoltrare il messaggio, sulla base del contenuto del messaggio.

In questa fase, RouterTable.cs esegue il set di regole SelectDestination trovato in Selectdestination.Rules per determinare a quale dei possibili endpoint (servizio di calcolatrice o servizio eco) inoltrare il messaggio.

Per comprendere meglio o modificare il set di regole SelectDestination , è necessario aprirlo utilizzando Esempio di toolkit di RuleSet esterno disponibile in .NET Framework versione 3.5 SDK.

Per aprire il set di regole SelectDestination

  1. Avviare l'applicazione Esempio di toolkit di RuleSet esterno.

  2. Scegliere Genera DataSet dal menu Importa.

  3. Nella finestra di dialogo Apri file selezionare router\SelectDestination.rules.

  4. Nell'editor di RuleSet fare clic sul set di regole SelectDestination.

  5. Nella finestra di dialogo Selezione flusso di lavoro, fare clic su Sfoglia.

  6. Nella finestra di dialogo dei file aperta, andare alla cartella router/bins e fare clic su WCF_Router.Router.exe.

  7. Nella sezione Tipi Contenuti della finestra di dialogo Selezione flusso di lavoro, fare clic su RoutingTable, quindi fare clic su OK.

  8. Nell'applicazione toolkit di RuleSet esterno, espandere SelectDestination, fare clic su Versione 1.0 equindi fare clic su Modifica regole.

  9. Quando viene aperto nel toolkit di RuleSet esterno, il set di regole SelectDestination appare come illustrato nell'illustrazione seguente.

Output dell'esempio di router WCF con set di regole

Set di regole SelectDestination dal toolkit di RuleSet esterno

All'interno del set di regole SelectDestination sono presenti sei regole. Qui di seguito viene presentata la descrizione di ogni regola, dal livello di priorità più alto al più basso.

  1. Initialize variables: inizializza le variabili nella classe RouterTable in modo che le restanti regole possano utilizzarle.
  2. CalculatorService: controlla se un messaggio corrisponde ai criteri per l'inoltro del messaggio a CalculatorService (i messaggi devono contenere l'intestazione "calculator"). In caso affermativo, l'endpoint CalculatorService viene aggiunto all'elenco di possibili endpoint ai quali il messaggio può essere inoltrato.
  3. EchoService: controlla se un messaggio corrisponde ai criteri per l'inoltro del messaggio a EchoService (i messaggi devono contenere l'intestazione Action http://microsoft.servicemodel.samples/iechoservice/echo). In caso affermativo, l'endpoint EchoService viene aggiunto all'elenco di possibili endpoint ai quali il messaggio può essere inoltrato.
  4. No matches: verifica che non esistano endpoint ai quali può essere inoltrato il messaggio. In caso sia true, questo fatto viene registrato nella console.
  5. One match: verifica se esiste almeno un endpoint al quale può essere inoltrato il messaggio. In caso sia true, inoltra il messaggio all'endpoint.
  6. Multiple match: verifica se esistono più endpoint ai quali potrebbe essere inoltrato il messaggio. Se è true, allora inoltra il messaggio a un endpoint selezionato casualmente dall'elenco dei possibili endpoint.

Si noti che questo RuleSet utilizza una funzionalità di .NET Framework 3.5 per le regole di Windows Workflow Foundation, che consente di utilizzare la parola chiave new per richiamare i costruttori di classi. Ad esempio, nella regola CalculatorService, se il messaggio corrisponde ai criteri, la regola aggiunge un nuovo EndpointAddress all'elenco di possibili indirizzi.

Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client. Premere INVIO nella finestra del client per arrestare il client.

Echo("Is anyone there?") returned: Is anyone there?
Add(5) returned: 5
Add(-3) returned: 2

Per generare ed eseguire l'esempio

  1. Per eseguire l'esempio su un solo computer o tra computer diversi, seguire le istruzioni in Running the Windows Communication Foundation Samples, con le seguenti eccezioni.

    • Per la configurazione su un solo computer o tra computer diversi sono necessari quattro progetti e quattro file eseguibili: uno per il client, uno per il router SOAP e uno per ogni servizio dell'applicazione.
    • In una configurazione a più computer, ai quattro file di configurazione è necessario apportate le modifiche seguenti:
    • Modificare la riga 21 del file App.config per CalculatorService e EchoService. Il nome host effettivo dell'intermediario deve sostituire il nome host localhost.
    • Modificare la riga 16 del file App.config del router. Modificare i due indirizzi (separati con una barra verticale "|") nel nome host di EchoService e CalculatorService, rispettivamente.
    • Modificare le righe 5 e 7 del file App.config del client. Il nome host effettivo dell'intermediario deve sostituire il nome host localhost.
    • È inoltre possibile eseguire ServiceModel Metadata Utility Tool (Svcutil.exe) sui due servizi dell'applicazione (dopo averli aggiornati per l'utilizzo dell'indirizzo corretto) e rigenerare i file App.config.
  2. Verificare che il router, EchoService e CalculatorService siano tutti in esecuzione prima di avviare il client. Ognuno dei tre servizi stampa gli indirizzi degli endpoint sui quali sono in ascolto all'avvio.

    Nota

    Gli endpoint dell'applicazione EchoService e CalculatorService utilizzano l'indirizzo del router.

  3. Eseguire il client. Il client contatta prima EchoServicee poi CalculatorService. Il router visualizza le azioni WS-Addressing dei messaggi che sta inoltrando, in entrambe le direzioni.

    Nota

    Se Client.exe e Router.exe si trovano su computer diversi, rimuovere il commento dalla sezione <identity/> in Client.exe.config e impostare il nome utente principale su quello dell'utente che esegue Router.exe.

Vedere anche

Attività

Esempio di toolkit di RuleSet esterno

Altre risorse

Intermediary Router

Invia commenti su questo argomento a Microsoft.