Gestione avanzata degli erroriAdvanced Error Handling

Questo esempio viene illustrato il servizio di routing di Windows Communication Foundation (WCF).This sample demonstrates the Windows Communication Foundation (WCF) routing service. 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. Nell'esempio viene illustrata la modalità di ripristino intelligente del servizio di routing in caso di errore mediante l'uso di transazioni e altri concetti di messaggistica più complessi, ad esempio il multicasting.This sample shows how the routing service intelligently recovers from errors, using transactions and other more complex messaging concepts such as multicasting.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. 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\AdvancedErrorHandling

Dettagli dell'esempioSample Details

In questo esempio il servizio di routing è configurato per leggere un messaggio da una coda MSMQ ed eseguirne il multicasting a due elenchi di code.In this sample, the routing service is configured to read a message from an MSMQ queue and multicast this message to two lists of queues. Un elenco viene usato per le code dei servizi e un altro per le code di registrazione.One list is used for service queues and another is used for logging queues.

Poiché per impostazione predefinita l'associazione MSMQ per il cui uso è configurato il servizio di routing supporta l'uso di transazioni, il servizio di routing verifica che il messaggio sia transazionale e che sia stato ricevuto da almeno una coda in ogni elenco prima della segnalazione alla coda in ingresso (InQ) a cui il messaggio è stato indirizzato correttamente.Because, by default, the MSMQ binding that the routing service is configured to use supports the use of transactions, the routing service makes sure that the message is transactional and received by at least one queue in each list before reporting to the Inbound Queue (InQ) that the message was successfully routed. Pertanto, nel caso in cui non siano disponibili entrambe le code dei servizi o entrambe le code di registrazione, il servizio di routing segnalerà l'impossibilità di indirizzare il messaggio e la coda in ingresso dovrà intraprendere un'azione.Thus, in the case where both of the service queues or both of the logging queues are unavailable, the routing service reports that the message could not be routed and the inbound queue should take some action. Questa azione consiste nello spostamento del messaggio alla coda di messaggi non recapitabili di sistema.This action consists of moving the message to the system dead letter queue.

Per usare questo esempioTo use this sample

  1. Importante

    Installare MSMQ prima di eseguire questo esempio.Install MSMQ before running this sample. Se MSMQ non è installato, nel momento in cui l'esempio viene eseguito verrà restituito un messaggio di eccezione.If MSMQ is not installed, an exception message is returned when running the sample. È possibile trovare istruzioni per l'installazione di MSMQ in l'installazione di Accodamento messaggi (MSMQ).Instructions for installing MSMQ can be found at Installing Message Queuing (MSMQ).

    Aprire AdvancedErrorHandling.sln usando Visual Studio 2012Visual Studio 2012.Using Visual Studio 2012Visual Studio 2012, open AdvancedErrorHandling.sln.

  2. Premere F5 oppure CTRL + MAIUSC + B in Visual Studio.Press F5 or CTRL+SHIFT+B in Visual Studio.

    1. Se l'applicazione viene compilata con CTRL+MAIUSC+B, sarà necessario avviare l'applicazione in ./RoutingService/bin/debug/RoutingService.exe.If you build the application with CTRL+SHIFT+B, you must start the application at ./RoutingService/bin/debug/RoutingService.exe.
  3. Nella finestra della console premere INVIO per avviare il client.In the console window, press ENTER to start the client.

  4. Il client restituirà statistiche diverse relativamente alle code per ogni caso.The client returns different statistics about the queues for each case.

    1. Di seguito è riportato l'output restituito per il caso 1 (nessun errore).The following is the output returned for case 1 (no failures).

      The inbound queue has 0 messages.  
      The primary service queue has 1 messages.   
      The backup service queue has 0 messages.   
      The primary logging queue has 1 messages.   
      The backup logging queue has 0 messages.   
      Press <Enter> to continue  
      
    2. Di seguito è riportato l'output restituito per il caso 3 (coda dei servizi primaria e di registrazione con errori).The following is the output returned for case 3 (primary service and logging queue failures).

      The inbound queue has 0 messages.   
      The primary service queue does not exist.   
      The backup service queue has 1 messages.   
      The primary logging queue does not exist.   
      The backup logging queue has 1 messages.   
      Press <ENTER> to continue.  
      
    3. Di seguito è riportato l'output restituito per il caso 4 (coda dei servizi primaria e coda di registrazione primaria e di backup con errori).The following is the output returned for case 4 (primary service queue and primary and backup logging queue failures).

      The inbound queue has 0 messages.   
      The primary service queue does not exist.  
      The backup service queue has 0 messages.   
      The primary logging queue does not exist.   
      The backup logging queue does not exist.   
      The System Dead Letter queue has 1 messages.   
      Press <ENTER> to Quit.  
      
    4. Di seguito è riportato l'output restituito per il caso 2 (coda dei servizi primaria con errori).The following is the output returned for case 2 (primary service queue failure).

      The inbound queue has 0 messages.   
      The primary service queue does not exist.  
      The backup service queue has 1 messages.   
      The primary logging queue has 1 messages.   
      The backup logging queue has 0 messages.   
      Press <ENTER> to continue.  
      

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 RoutingService\App.config affinché non venga riconosciuto e modificare il valore del campo configDriven in RoutingService\Program.cs su false per usare la configurazione definita nel codice.You can also change the name of the RoutingService\App.config file to something else so that it is not recognized and change the value of the configDriven field in RoutingService\Program.cs to false to use the configuration defined in the code. Entrambi i metodi restituiscono lo stesso comportamento da parte del router.Either method results in the same behavior from the router.

ScenarioScenario

In questo esempio viene illustrato come il servizio di routing sia in grado di gestire funzionalità di messaggistica avanzate, ad esempio transazioni e contesto di ricezione, e possa usare tali funzionalità come parte della gestione corretta di scenari di errore.This sample demonstrates that the routing service can handle advanced messaging capabilities, such as transactions and receive context, and that it can utilize these capabilities as a part of correctly handling error scenarios.

Scenario realeReal World Scenario

Contoso desidera usare ricezioni transazionali tramite il servizio di routing per garantire che tutti i servizi necessari ricevano le informazioni anche durante le condizioni di errore.Contoso wants to utilize transactional receives through the routing service to ensure that all necessary services receive information even during error conditions. Desidera inoltre che gli errori vengano gestiti correttamente e automaticamente e che i problemi vengano segnalati nel caso in cui un messaggio non sia recapitabile anche quando viene usata la logica di gestione degli errori.Furthermore, they would like errors to be handled correctly and automatically and failures to be reported in the case that a message is undeliverable even when error handling logic is utilized. Per questo scopo, il servizio di routing viene configurato per il failover di endpoint specifici come previsto. Tale servizio gestisce inoltre le situazioni di errore, inclusi la creazione, il completamento, il rollback o l'interruzione di transazioni/contesti di ricezione in base alle necessità.For this purpose, they configure the routing service to fail over to specific endpoints as expected and the routing service handles the error situations, which includes the creation, completion, and rollback/aborting of transactions/receive contexts as necessary.

Vedere ancheSee Also

Hosting di AppFabric ed esempi di persistenzaAppFabric Hosting and Persistence Samples