Erwartete AusnahmenExpected Exceptions

Dieses Beispiel zeigt, wie erwartete Ausnahmen beim Verwenden eines typisierten Clients abgefangen werden.This sample demonstrates how to catch expected exceptions when using a typed client. Dieses Beispiel basiert auf der Einstieg , implementiert einen rechnerdienst.This sample is based on the Getting Started that implements a calculator service. In diesem Beispiel ist der Client eine Konsolenanwendung (.exe), und der Dienst wird von IIS (Internet Information Services, Internetinformationsdienste) gehostet.In this sample, the client is a console application (.exe) and the service is hosted by Internet Information Services (IIS).

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Dieses Beispiel zeigt das Abfangen und Behandeln von erwarteten Ausnahmen beider Typen, die korrekte Programme verarbeiten müssen: TimeoutException und CommunicationException.This sample demonstrates catching and handling the two expected exception types that correct programs must handle: TimeoutException and CommunicationException.

Ausnahmen, die aus Kommunikationsmethoden in einem Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Client ausgelöst werden, sind entweder erwartet oder unerwartet.Exceptions that are thrown from communication methods on a Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) client are either expected or unexpected. Unerwartete Ausnahmen umfassen katastrophale Fehler (wie OutOfMemoryException) und Programmierfehler (wie ArgumentNullException oder InvalidOperationException).Unexpected exceptions include catastrophic failures like OutOfMemoryException and programming errors like ArgumentNullException or InvalidOperationException. Meist gibt es keinen praktikablen Weg im Umgang mit unerwarteten Fehlern, daher sollten sie beim Aufruf einer Kommunikationsmethode aus dem WCFWCF-Client meist auch gar nicht abgefangen werden.Typically there is no useful way to handle unexpected errors, so typically you should not catch them when calling a WCFWCF client communication method.

Zu den erwarteten Ausnahmen aus Kommunikationsmethoden in einem WCFWCF-Client gehören TimeoutException, CommunicationException und jede von CommunicationException abgeleitete Klasse.Expected exceptions from communication methods on a WCFWCF client include TimeoutException, CommunicationException, and any derived class of CommunicationException. Sie zeigen an, dass während der Kommunikation ein Problem aufgetreten ist, das sicher behandelt werden kann, indem der WCFWCF-Client abgebrochen und ein Kommunikationsfehler gemeldet wird.These indicate a problem during communication that can be safely handled by aborting the WCFWCF client and reporting a communication failure. Da diese Fehler durch externe Faktoren in jeder Anwendung verursacht werden können, müssen ordnungsgemäße Anwendungen diese Ausnahmen abfangen und wiederherstellen, wenn sie auftreten.Because external factors can cause these errors in any application, correct applications must catch these exceptions and recover when they occur.

Es gibt verschiedene von CommunicationException abgeleitete Klassen, die ein Client auslösen kann.There are several derived classes of CommunicationException that a client can throw. In manchen Fällen fangen Anwendungen auch einige von ihnen ab, um eine bestimmte Verarbeitung auszuführen, während sie andere Ausnahmen als CommunicationException behandeln lassen.In some cases, applications also catch some of these to do special handling, but let the others be handled as a CommunicationException. Dies kann durchgeführt werden, indem zuerst Ausnahmen bestimmter Typen und dann CommunicationException in einer späteren Abfangklausel abgefangen werden.This can be accomplished by catching the more specific exception type first and then catching CommunicationException in a later catch-clause.

Code, der eine Clientkommunikationsmethode aufruft, muss TimeoutException und CommunicationException abfangen.Code that calls a client communication method must catch the TimeoutException and CommunicationException. Eine Möglichkeit zum Umgang mit solchen Fehlern wäre, den Client abzubrechen und den Kommunikationsfehler zu melden.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();  
}  

Wenn eine erwartete Ausnahme auftritt, kann der Client anschließend noch verwendbar oder nicht mehr verwendbar sein.If an expected exception occurs, the client may or may not be usable afterwards. Um zu bestimmen, ob der Client immer noch verwendbar ist, überprüfen Sie, dass die State-Eigenschaft CommunicationState.Opened ist.To determine if the client is still usable, check that the State property is CommunicationState.Opened. Wenn der Client immer noch geöffnet ist, dann ist er auch noch verwendbar.If it is still opened, then it is still usable. Andernfalls sollten Sie den Client abbrechen und alle Verweise auf ihn freigeben.Otherwise you should abort the client and release all references to it.

Achtung

Manchmal lässt sich beobachten, dass Clients mit einer Sitzung nach einer Ausnahme nicht mehr verwendbar sind, während Clients ohne eine Sitzung auch nach Auftreten einer Ausnahme oftmals noch verwendet werden können.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. Da es jedoch für keinen der beiden Fälle eine Garantie gibt, sollte die Anwendung – falls der Client nach einer Ausnahme weiter verwendet werden soll – mithilfe der State-Eigenschaft überprüfen, ob der Client weiterhin geöffnet ist.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.

Wenn Sie das Beispiel ausführen, werden die Antworten und Ausnahmen für den Vorgang im Konsolenfenster des Clients angezeigt.When you run the sample, the operation responses and exceptions are displayed in the client console window.

Der Clientprozess führt zwei Szenarios aus, die beide versuchen, Add und anschließend Divide aufzurufen.The client process runs two scenarios, each of which attempts to call Add followed by Divide. Das erste Szenario simuliert ein Netzwerkproblem, indem der Client vor dem Aufruf von Divide abgebrochen wird.The first scenario simulates a network issue by aborting the client before making the call to Divide. Das zweite Szenario verursacht einen Timeout-Zustand, indem ein so kurzes Timeout festgelegt wird, dass die Methode nicht abgeschlossen werden kann.The second scenario causes a timeout condition by setting the timeout too short for the method to complete. Die erwartete Ausgabe vom Clientprozess lautet wie folgt: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  

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.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)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Client\ExpectedExceptions

Siehe auchSee Also