Behandeln von FehlernHandling Errors

Die Klassen WebRequest und WebResponse lösen beide Systemausnahmen (z.B. ArgumentException) und webspezifische Ausnahmen (bei denen es sich um WebException handelt, ausgelöst von der GetResponse-Methode) aus.The WebRequest and WebResponse classes throw both system exceptions (such as ArgumentException) and Web-specific exceptions (which are WebException thrown by the GetResponse method).

Jede WebException enthält eine Status-Eigenschaft, die einen Wert aus der WebExceptionStatus-Enumeration enthält.Each WebException includes a Status property that contains a value from the WebExceptionStatus enumeration. Sie können die Status-Eigenschaft untersuchen, um den aufgetretenen Fehler zu bestimmen und dann die richtigen Schritte vornehmen, um den Fehler zu beheben.You can examine the Status property to determine the error that occurred and take the proper steps to resolve the error.

In der folgenden Tabelle werden die möglichen Rückgabewerte für die Status-Eigenschaft beschrieben.The following table describes the possible values for the Status property.

StatusStatus BESCHREIBUNGDescription
ConnectFailureConnectFailure Der Remotedienst konnte auf Transportebene nicht erreicht werden.The remote service could not be contacted at the transport level.
ConnectionClosedConnectionClosed Die Verbindung wurde vorzeitig getrennt.The connection was closed prematurely.
KeepAliveFailureKeepAliveFailure Der Server hat die Verbindung mit dem festgelegten Keep-Alive-Header.The server closed a connection made with the Keep-alive header set.
NameResolutionFailureNameResolutionFailure Die Namensdienst konnte den Hostnamen nicht auflösen.The name service could not resolve the host name.
ProtocolErrorProtocolError Die Antwort, die vom Server empfangen wurde, war vollständig, aber hat einen Fehler auf Protokollebene angezeigt.The response received from the server was complete but indicated an error at the protocol level.
ReceiveFailureReceiveFailure Es wurde keine vollständige Nachricht vom Remoteserver empfangen.A complete response was not received from the remote server.
RequestCanceledRequestCanceled Die Anforderung wurde abgebrochen.The request was canceled.
SecureChannelFailureSecureChannelFailure In einem sicheren Channel-Link ist ein Fehler aufgetreten.An error occurred in a secure channel link.
SendFailureSendFailure Es konnte keine vollständige Anforderung an den Remoteserver gesendet werden.A complete request could not be sent to the remote server.
ServerProtocolViolationServerProtocolViolation Die Serverantwort ist eine ungültige HTTP-Antwort.The server response was not a valid HTTP response.
ErfolgreichSuccess Es ist kein Fehler aufgetreten.No error was encountered.
TimeoutTimeout Innerhalb des festgelegten Timeouts wurde keine Antwort für die Anforderung erhalten.No response was received within the time-out set for the request.
TrustFailureTrustFailure Ein Serverzertifikat konnte nicht überprüft werden.A server certificate could not be validated.
MessageLengthLimitExceededMessageLengthLimitExceeded Es wurde eine Nachricht erhalten, die den angegebenen Grenzwert für das Senden einer Anforderung oder das Erhalten einer Antwort vom Server überschritten hat.A message was received that exceeded the specified limit when sending a request or receiving a response from the server.
AusstehendPending Eine interne asynchrone Anforderung steht aus.An internal asynchronous request is pending.
PipelineFailurePipelineFailure Dieser Wert unterstützt die .NET Framework-Infrastruktur und ist nicht für die direkte Verwendung in Ihrem Code vorgesehen.This value supports the .NET Framework infrastructure and is not intended to be used directly in your code.
ProxyNameResolutionFailureProxyNameResolutionFailure Der Namensresolverdienst konnte den Hostnamen des Proxys nicht auflösen.The name resolver service could not resolve the proxy host name.
UnknownErrorUnknownError Eine Ausnahme unbekannten Typs wurde ausgelöst.An exception of unknown type has occurred.

Wenn es sich bei der Status-Eigenschaft um WebExceptionStatus.ProtocolError handelt, ist eine WebResponse verfügbar, die die Antwort des Servers enthält.When the Status property is WebExceptionStatus.ProtocolError, a WebResponse that contains the response from the server is available. Sie können diese Antwort untersuchen, um die tatsächliche Quelle des Protokollfehlers zu bestimmen.You can examine this response to determine the actual source of the protocol error.

Das folgende Beispiel demonstriert das Abfangen einer WebException.The following example shows how to catch a WebException.

try   
{  
    // Create a request instance.  
    WebRequest myRequest =   
    WebRequest.Create("http://www.contoso.com");  
    // Get the response.  
    WebResponse myResponse = myRequest.GetResponse();  
    //Get a readable stream from the server.   
    Stream sr = myResponse.GetResponseStream();  
  
    //Read from the stream and write any data to the console.  
    bytesread = sr.Read( myBuffer, 0, length);  
    while( bytesread > 0 )   
    {  
        for (int i=0; i<bytesread; i++) {  
            Console.Write( "{0}", myBuffer[i]);  
        }  
        Console.WriteLine();  
        bytesread = sr.Read( myBuffer, 0, length);  
    }  
    sr.Close();  
    myResponse.Close();  
}  
catch (WebException webExcp)   
{  
    // If you reach this point, an exception has been caught.  
    Console.WriteLine("A WebException has been caught.");  
    // Write out the WebException message.  
    Console.WriteLine(webExcp.ToString());  
    // Get the WebException status code.  
    WebExceptionStatus status =  webExcp.Status;  
    // If status is WebExceptionStatus.ProtocolError,   
    //   there has been a protocol error and a WebResponse   
    //   should exist. Display the protocol error.  
    if (status == WebExceptionStatus.ProtocolError) {  
        Console.Write("The server returned protocol error ");  
        // Get HttpWebResponse so that you can check the HTTP status code.  
        HttpWebResponse httpResponse = (HttpWebResponse)webExcp.Response;  
        Console.WriteLine((int)httpResponse.StatusCode + " - "  
           + httpResponse.StatusCode);  
    }  
}  
catch (Exception e)   
{  
    // Code to catch other exceptions goes here.  
}  
Try  
    ' Create a request instance.  
    Dim myRequest As WebRequest = WebRequest.Create("http://www.contoso.com")  
    ' Get the response.  
    Dim myResponse As WebResponse = myRequest.GetResponse()  
    'Get a readable stream from the server.   
    Dim sr As Stream = myResponse.GetResponseStream()  
  
    Dim i As Integer      
    'Read from the stream and write any data to the console.  
    bytesread = sr.Read(myBuffer, 0, length)  
    While bytesread > 0  
        For i = 0 To bytesread - 1  
            Console.Write("{0}", myBuffer(i))  
        Next i  
        Console.WriteLine()  
        bytesread = sr.Read(myBuffer, 0, length)  
    End While  
    sr.Close()  
    myResponse.Close()  
Catch webExcp As WebException  
    ' If you reach this point, an exception has been caught.  
    Console.WriteLine("A WebException has been caught.")  
    ' Write out the WebException message.  
    Console.WriteLine(webExcp.ToString())  
    ' Get the WebException status code.  
    Dim status As WebExceptionStatus = webExcp.Status  
    ' If status is WebExceptionStatus.ProtocolError,   
    '   there has been a protocol error and a WebResponse   
    '   should exist. Display the protocol error.  
    If status = WebExceptionStatus.ProtocolError Then  
        Console.Write("The server returned protocol error ")  
        ' Get HttpWebResponse so that you can check the HTTP status code.  
        Dim httpResponse As HttpWebResponse = _  
           CType(webExcp.Response, HttpWebResponse)  
        Console.WriteLine(CInt(httpResponse.StatusCode).ToString() & _  
           " - " & httpResponse.StatusCode.ToString())  
    End If  
Catch e As Exception  
    ' Code to catch other exceptions goes here.  
End Try  

Anwendungen, die die Klasse Socket verwenden, lösen SocketException aus, wenn ein Fehler auf dem Windows Socket auftritt.Applications that use the Socket class throw SocketException when errors occur on the Windows socket. Die Klassen TcpClient, TcpListener und UdpClient werden basierend auf der Socket-Klasse erstellt und lösen ebenfalls SocketExceptions aus.The TcpClient, TcpListener, and UdpClient classes are built on top of the Socket class and throw SocketExceptions as well.

Wenn eine SocketException ausgelöst wird, legt die SocketException-Klasse die ErrorCode-Eigenschaft auf den zuletzt aufgetretenen Betriebssystemsocketfehler fest.When a SocketException is thrown, the SocketException class sets the ErrorCode property to the last operating system socket error that occurred. Weitere Informationen zu Socketfehlercodes finden Sie in der Fehlercodedokumentation von Winsock 2.0 API in MSDN.For more information about socket error codes, see the Winsock 2.0 API error code documentation in MSDN.

Siehe auchSee also