Bridging e gestione degli erroriBridging and Error Handling

In questo esempio di seguito viene illustrato come utilizzata il servizio di routing di Windows Communication Foundation (WCF) per il collegamento delle comunicazioni tra un client e un servizio che utilizzano associazioni diverse.This sample demonstrates how the Windows Communication Foundation (WCF) routing service is used for bridging communication between a client and a service that use different bindings. L'esempio mostra inoltre come utilizzare un servizio di backup per scenari di failover.This sample also shows how to use a back-up service for failover scenarios. Il servizio di routing è un componente WCF che rende più semplice includere un router basato sul contenuto nell'applicazione.The routing service is a WCF component that makes it easy to include a content-based router in your application. In questo esempio adatta l'esempio di calcolatrice WCF standard per comunicare tramite il servizio di routing.This sample adapts the standard WCF Calculator Sample to communicate using the routing service.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\RoutingServices\ErrorHandlingAndBridging

Dettagli dell'esempioSample Details

In questo esempio, il client calcolatrice è configurato per inviare messaggi a un endpoint esposto dal router.In this sample, the Calculator client is configured to send messages to an endpoint exposed by the router. Il servizio di routing è configurato per accettare tutti i messaggi ad esso inviati e per inoltrarli a un endpoint che corrisponde al servizio di calcolatrice.The routing service is configured to accept all messages sent to it and to forward them to an endpoint that corresponds to the Calculator service. Nei punti seguenti viene descritta la configurazione del servizio di calcolatrice primario, del servizio di calcolatrice di backup e del client calcolatrice. Vengono inoltre fornite informazioni sulla modalità di comunicazione tra client e servizio mediante il servizio di routing:The following points describe the configuration of the primary Calculator service, the back-up Calculator service, and the Calculator client and how the communication between the client and the service happens using the routing service:

  • Il client calcolatrice è configurato per utilizzare BasicHttpBinding, mentre il servizio di calcolatrice è configurato per utilizzare NetTcpBinding.The Calculator client is configured to use BasicHttpBinding while the Calculator service is configured to use NetTcpBinding. Il servizio di routing converte automaticamente i messaggi in modo appropriato prima di inviarli al servizio di calcolatrice e converte anche le risposte in modo che il client calcolatrice sia in grado di accedervi.The routing service automatically converts the messages as necessary before sending them to the Calculator service and it also converts the responses so that the Calculator client can access them.

  • Il servizio di routing è in grado di riconoscere la presenza di due servizi di calcolatrice: il servizio di calcolatrice primario e il servizio di calcolatrice di backup.The routing service knows about two Calculator services: the primary Calculator service and the back-up Calculator service. Il servizio di routing tenta in primo luogo di comunicare con l'endpoint del servizio di calcolatrice primario.The routing service first attempts to communicate with the primary Calculator service endpoint. Se il tentativo non riesce a causa dell'inattività dell'endpoint, il servizio di routing tenta di comunicare con l'endpoint del servizio di calcolatrice di backup.If this attempt fails due to the endpoint being down, the routing service then tries to communicate with the back-up Calculator service endpoint.

I messaggi inviati dal client vengono pertanto ricevuti dal router e reindirizzati al servizio di calcolatrice effettivo.Thus messages sent from the client are received by the router and are rerouted to the actual Calculator service. Se l'endpoint del servizio di calcolatrice è inattivo, il servizio di routing instrada il messaggio all'endpoint del servizio di calcolatrice di backup.If the Calculator service endpoint is down, the routing service routes the message to the back-up Calculator service endpoint. I messaggi provenienti dal servizio di calcolatrice di backup vengono inviati nuovamente al router del servizio, che a sua volta li inoltra al client calcolatrice.Messages from the back-up Calculator service are sent back to the service router, which in turn passes them back to the Calculator client.

Nota

In un elenco di backup possono essere definiti più endpoint.A back-up list can have more than one endpoint defined. In questo caso, se l'endpoint del servizio di backup è inattivo, il servizio di routing tenta di connettersi all'endpoint di backup successivo nell'elenco fino a quando il tentativo di connessione non riesce.In this case if the back-up service endpoint is down, the routing service attempts to connect to the next back-up endpoint in the list until a successful connection occurs.

Per usare questo esempioTo use this sample

  1. Utilizzando Visual Studio 2012Visual Studio 2012, aprire RouterBridgingAndErrorHandling.sln.Using Visual Studio 2012Visual Studio 2012, open RouterBridgingAndErrorHandling.sln.

  2. Premere F5 o CTRL+MAIUSC+B in Visual StudioPress F5 or CTRL+SHIFT+B in Visual Studio

    1. Se si desidera avviare automaticamente i progetti necessari quando si preme F5, fare doppio clic la soluzione, selezionare proprietàe il progetto di avvio nodo proprietà comuniselezionare più progetti di avvioe impostare tutti i progetti avviare.If you would like to auto-launch the necessary projects when you press F5, right-click the solution, select Properties, and in the Startup Project node under Common Properties, select Multiple Startup Projects, and set all projects to Start.

    2. Se si compila il progetto con CTRL+MAIUSC+B, avviare le applicazioni seguenti:If you build the project with CTRL+SHIFT+B, start the following applications:

      1. Client calcolatrice (./CalculatorClient/bin/client.exe)Calculator client (./CalculatorClient/bin/client.exe)

      2. Servizio di calcolatrice (./CalculatorService/bin/service.exe)Calculator service (./CalculatorService/bin/service.exe)

      3. Servizio di routing (./RoutingService/bin/RoutingService.exe)Routing Service (./RoutingService/bin/RoutingService.exe)

  3. Nel client calcolatrice, premere INVIO per avviare il client.In the Calculator Client, press ENTER to start the client.

    È necessario visualizzare il seguente output:You should see the following output:

    Add(100,15.99) = 115.99  
    Subtract(145,76.54) = 68.46  
    Multiply(9,81.25) = 731.25  
    Divide(22,7) = 3.14285714285714  
    

Configurabile tramite codice o App.configConfigurable Via Code or App.config

L'esempio proposto è configurato per l'uso di un file App.config per la definizione del comportamento del router.The sample ships configured to use an App.config file to define the router’s behavior. È inoltre possibile modificare il nome del file App.config affinché non venga riconosciuto e rimuovere i commenti dalla chiamata al metodo in ConfigureRouterViaCode().You can also change the name of the App.config file to something else so that it is not recognized and uncomment the method call to ConfigureRouterViaCode(). Entrambi i metodi restituiscono lo stesso comportamento da parte del router.Either method results in the same behavior from the router.

ScenarioScenario

L'esempio dimostra il funzionamento del router del servizio come bridge del protocollo e gestore errori.This sample demonstrates the service router acting as a protocol bridge and error handler. In questo scenario, non si verifica alcun routing basato sul contenuto; il servizio di routing viene utilizzato come nodo proxy trasparente configurato per inoltrare direttamente messaggi a un set preconfigurato di endpoint di destinazione.In this scenario, no content-based routing occurs; the routing service acts as a transparent proxy node configured to pass messages directly to a preconfigured set of destination endpoints. Il servizio di routing esegue inoltre i passaggi aggiuntivi di gestione trasparente degli errori che si verificano in caso di invio agli endpoint con i quali è prevista la comunicazione in base alla configurazione.The routing service also performs the additional steps of transparently handling errors that occur when it tries to send to the endpoints that it is configured to communicate with. Utilizzato come bridge del protocollo, il servizio di routing consente all'utente di definire un protocollo per le comunicazioni esterne e un altro per le comunicazioni interne.By acting as a protocol bridge, the routing service enables the user to define one protocol for external communication and another for internal communication.

Scenario realeReal World Scenario

Contoso desidera fornire un endpoint del servizio interoperativo a livello mondiale, ottimizzando al contempo le prestazioni interne.Contoso wants to provide an interoperable service endpoint to the world, while optimizing performance internally. Propone pertanto i propri servizi a livello internazionale tramite un endpoint utilizzando BasicHttpBinding e ricorrendo internamente al servizio di routing che funge da bridge alla connessione all'endpoint utilizzando NetTcpBinding, impiegato dai propri servizi.Thus it exposes its services to the world through an endpoint using the BasicHttpBinding, while internally using the routing service to bridge that connection to the endpoint using NetTcpBinding, which its services use. Inoltre, poiché Contoso desidera che il servizio offerto tenga conto di possibili periodi di interruzione temporanei in uno dei servizi di produzione, virtualizza più endpoint associati al servizio del router utilizzando le funzionalità di gestione degli errori per il failover automatico nel caso in cui si renda necessario effettuare il backup degli endpoint.Furthermore, Contoso wants its service offering to be tolerant of temporary outages in any one of their production services and thus virtualizes multiple endpoints behind the router service using the ’s error handling capabilities to automatically failover to back-up endpoints when necessary.

Vedere ancheSee Also

Hosting di AppFabric ed esempi di persistenzaAppFabric Hosting and Persistence Samples