Obsługa błędówHandling Errors

Klasy WebRequest WebResponse i zgłaszać zarówno wyjątki ArgumentExceptionsystemowe (takie jak ) WebException i GetResponse wyjątki specyficzne dla sieci Web (które są generowane przez metodę).The WebRequest and WebResponse classes throw both system exceptions (such as ArgumentException) and Web-specific exceptions (which are WebException thrown by the GetResponse method).

Każdy WebException Status zawiera właściwość, która WebExceptionStatus zawiera wartość z wyliczenia.Each WebException includes a Status property that contains a value from the WebExceptionStatus enumeration. Można zbadać Status właściwości, aby określić błąd, który wystąpił i podjąć odpowiednie kroki, aby rozwiązać błąd.You can examine the Status property to determine the error that occurred and take the proper steps to resolve the error.

W poniższej tabeli opisano możliwe wartości właściwości Status.The following table describes the possible values for the Status property.

StanStatus OpisDescription
ConnectFailure (Połączenie)ConnectFailure Nie można skontaktować się z usługą zdalną na poziomie transportu.The remote service could not be contacted at the transport level.
ConnectionClosed (Zamknięte połączenie)ConnectionClosed Połączenie zostało zamknięte przedwcześnie.The connection was closed prematurely.
KeepAliveWłasnaKeepAliveFailure Serwer zamknął połączenie nawiązanym z zestawem nagłówków Keep-alive.The server closed a connection made with the Keep-alive header set.
NazwaResolutionFailureNameResolutionFailure Usługa nazw nie może rozpoznać nazwy hosta.The name service could not resolve the host name.
ProtokółErrorProtocolError Odpowiedź otrzymana z serwera została ukończona, ale wskazywała błąd na poziomie protokołu.The response received from the server was complete but indicated an error at the protocol level.
ReceiveFailure (Nieujmowie)ReceiveFailure Pełna odpowiedź nie została odebrana z serwera zdalnego.A complete response was not received from the remote server.
RequestCanceled (Wyliczył)RequestCanceled Żądanie zostało anulowane.The request was canceled.
SecureChannelWładniaSecureChannelFailure Wystąpił błąd w łączu bezpiecznego kanału.An error occurred in a secure channel link.
SendFailure (Niebezpieczeństwo wyślij)SendFailure Nie można wysłać kompletnego żądania do serwera zdalnego.A complete request could not be sent to the remote server.
ServerProtocolViolation (Proces serweraProtocolViolation)ServerProtocolViolation Odpowiedź serwera nie była prawidłową odpowiedzią HTTP.The server response was not a valid HTTP response.
PowodzenieSuccess Nie wystąpił żaden błąd.No error was encountered.
Limit czasuTimeout W terminie wyznaczonym dla wniosku nie otrzymano odpowiedzi.No response was received within the time-out set for the request.
ZaufanieWłasnośćTrustFailure Nie można zweryfikować certyfikatu serwera.A server certificate could not be validated.
WiadomośćLengthLimitExceededMessageLengthLimitExceeded Odebrano wiadomość, która przekroczyła określony limit podczas wysyłania żądania lub odbierania odpowiedzi z serwera.A message was received that exceeded the specified limit when sending a request or receiving a response from the server.
OczekującePending Oczekuje na wewnętrzne żądanie asynchroniczne.An internal asynchronous request is pending.
Awaria rurociąguPipelineFailure Ta wartość obsługuje infrastrukturę .NET Framework i nie jest przeznaczona do użycia bezpośrednio w kodzie.This value supports the .NET Framework infrastructure and is not intended to be used directly in your code.
ProxyNameResolutionFailureProxyNameResolutionFailure Usługa rozpoznawania nazw nie może rozpoznać nazwy hosta serwera proxy.The name resolver service could not resolve the proxy host name.
NieznanyErrorUnknownError Wystąpił wyjątek nieznanego typu.An exception of unknown type has occurred.

Gdy właściwość Status jest WebExceptionStatus.ProtocolError, WebResponse, który zawiera odpowiedź z serwera jest dostępna.When the Status property is WebExceptionStatus.ProtocolError, a WebResponse that contains the response from the server is available. Można sprawdzić tę odpowiedź, aby określić rzeczywiste źródło błędu protokołu.You can examine this response to determine the actual source of the protocol error.

W poniższym przykładzie pokazano, jak złapać 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  

Aplikacje, Socket które SocketException używają rzutu klasy, gdy wystąpią błędy w gnieździe systemu Windows.Applications that use the Socket class throw SocketException when errors occur on the Windows socket. TcpListener UdpClient , TcpClienti klasy są zbudowane na górze Socket klasy i rzucać SocketExceptions, jak również.The TcpClient, TcpListener, and UdpClient classes are built on top of the Socket class and throw SocketExceptions as well.

Po uruchomieniu SocketException, SocketException klasa ErrorCode ustawia właściwość do ostatniego błędu gniazda systemu operacyjnego, który wystąpił.When a SocketException is thrown, the SocketException class sets the ErrorCode property to the last operating system socket error that occurred. Aby uzyskać więcej informacji na temat kodów błędów gniazda, zobacz dokumentację kodu błędu interfejsu API Winsock 2.0 w sieci MSDN.For more information about socket error codes, see the Winsock 2.0 API error code documentation in MSDN.

Zobacz teżSee also