Eccezioni previsteExpected Exceptions

In questo esempio viene illustrato come rilevare le eccezioni previste quando si utilizza un client tipizzato.This sample demonstrates how to catch expected exceptions when using a typed client. Questo esempio è basato sul Introduzione che implementa un servizio di calcolatrice.This sample is based on the Getting Started that implements a calculator service. In questo esempio, il client è un'applicazione console (.exe) e il servizio è ospitato da Internet Information Services (IIS).In this sample, the client is a console application (.exe) and the service is hosted by Internet Information Services (IIS).

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.The setup procedure and build instructions for this sample are located at the end of this topic.

In questo esempio viene illustrata l'intercettazione e la gestione di due tipi di eccezione previsti che devono essere gestiti da programmi specifici, ovvero TimeoutException e CommunicationException.This sample demonstrates catching and handling the two expected exception types that correct programs must handle: TimeoutException and CommunicationException.

Le eccezioni generate dai metodi di comunicazione in un client Windows Communication Foundation (WCF) sono previste o impreviste.Exceptions that are thrown from communication methods on a Windows Communication Foundation (WCF) client are either expected or unexpected. Le eccezioni impreviste includono gli errori irreversibili come OutOfMemoryException e gli errori di programmazione come ArgumentNullException o InvalidOperationException.Unexpected exceptions include catastrophic failures like OutOfMemoryException and programming errors like ArgumentNullException or InvalidOperationException. In genere non è utile per gestire gli errori imprevisti, pertanto, in genere che è necessario non intercettare li quando si chiama un metodo di comunicazione client WCF.Typically there is no useful way to handle unexpected errors, so typically you should not catch them when calling a WCF client communication method.

Previsto eccezioni dai metodi di comunicazione in un client WCF includono TimeoutException, CommunicationException, e qualsiasi classe derivata da CommunicationException.Expected exceptions from communication methods on a WCF client include TimeoutException, CommunicationException, and any derived class of CommunicationException. Queste informazioni indicano un problema durante la comunicazione che può essere gestita in modo sicuro da interrompere il client WCF e la segnalazione di un errore di comunicazione.These indicate a problem during communication that can be safely handled by aborting the WCF client and reporting a communication failure. Perché fattori esterni possono provocare questi errori in qualsiasi applicazione, le eccezioni devono essere rilevate da applicazioni specifiche e deve essere eseguito il ripristino quando si verificano.Because external factors can cause these errors in any application, correct applications must catch these exceptions and recover when they occur.

Un client può generare numerose classi derivate di CommunicationException.There are several derived classes of CommunicationException that a client can throw. In alcuni casi, le applicazioni rilevano anche alcune di queste eccezioni per una gestione speciale, ma lasciano che le altre vengano gestite come CommunicationException.In some cases, applications also catch some of these to do special handling, but let the others be handled as a CommunicationException. Questo processo può essere portato a termine rilevando prima il tipo di eccezione più specifico e quindi CommunicationException in una clausola di rilevamento successiva.This can be accomplished by catching the more specific exception type first and then catching CommunicationException in a later catch-clause.

Il codice che chiama un metodo di comunicazione client deve rilevare TimeoutException e CommunicationException.Code that calls a client communication method must catch the TimeoutException and CommunicationException. Un modo per gestire tali errori consiste nell'interrompere il client e riportare l'errore di comunicazione.One way to handle such errors is to abort the client and report the communication failure.

try  
{  
    ...  
    double result = client.Add(value1, value2);  
    ...  
    client.Close();  
}  
catch (TimeoutException exception)  
{  
    Console.WriteLine("Got {0}", exception.GetType());  
    client.Abort();  
}  
catch (CommunicationException exception)  
{  
    Console.WriteLine("Got {0}", exception.GetType());  
    client.Abort();  
}  

In seguito a un'eccezione prevista, il client può essere utilizzabile o non esserlo.If an expected exception occurs, the client may or may not be usable afterwards. Per determinare se il client può ancora essere utilizzato, verificare che la proprietà State sia impostata su CommunicationState.Opened.To determine if the client is still usable, check that the State property is CommunicationState.Opened. Se è aperto, può essere ancora utilizzato.If it is still opened, then it is still usable. In caso contrario è necessario interrompere il client e rilasciare tutti i riferimenti attinenti.Otherwise you should abort the client and release all references to it.

Attenzione

È possibile osservare che i client che dispongono di una sessione spesso possono più essere utilizzati dopo un'eccezione, mentre i client privi di una sessione spesso possono ancora essere utilizzati dopo un'eccezione.You may observe that clients that have a session are often no longer usable after an exception, and clients that do not have a session are often still usable after an exception. Tuttavia, nessuno di questi comportamenti è garantito, pertanto se si desidera continuare a utilizzare il client dopo un'eccezione, l'applicazione dovere controllare la proprietà State per verificare che il client sia ancora aperto.However, neither of these is guaranteed, so if you want to try to continue using the client after an exception your application should check the State property to verify the client is still opened.

Quando si esegue l'esempio, le risposte e le eccezioni dell'operazione vengono visualizzate nella finestra della console client.When you run the sample, the operation responses and exceptions are displayed in the client console window.

Il processo client esegue due scenari, ognuno dei quali tenta di chiamare Add seguito da Divide.The client process runs two scenarios, each of which attempts to call Add followed by Divide. Il primo scenario simula un problema di rete interrompendo il client prima di effettuare la chiamata a Divide.The first scenario simulates a network issue by aborting the client before making the call to Divide. Il secondo scenario provoca una condizione di timeout impostando un valore di timeout troppo breve per consentire il completamento del metodo.The second scenario causes a timeout condition by setting the timeout too short for the method to complete. L'output previsto dal processo client è:The expected output from the client process is:

Add(100,15.99) = 115.99  
Simulated network problem occurs...  
Got System.ServiceModel.CommunicationObjectAbortedException  
Add(100,15.99) = 115.99  
Set timeout too short for method to complete...  
Got System.TimeoutException  

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Assicurarsi di avere eseguito la procedura di installazione singola per gli esempi di Windows Communication Foundation.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Per eseguire l'esempio in una configurazione singola o tra computer, seguire le istruzioni in esegue gli esempi di Windows Communication Foundation.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

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\Client\ExpectedExceptions

Vedere ancheSee Also