네트워크 앱에서 예외를 처리하는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

이 항목에서는 JavaScript 및 HTML로 작성된 Windows 스토어 앱에서 네트워킹 API를 사용할 때 예외를 처리하는 방법을 설명합니다.

알아야 할 사항

기술

  • Windows.Networking.Sockets

    소켓 및 WebSocket을 사용하여 네트워크 통신을 사용하도록 설정합니다.

  • Windows.Web.Http

    Windows 스토어 앱에 최신 HTTP 및 REST 클라이언트 API를 제공합니다.

사전 요구 사항

  • 다음 정보는 원격 연결에 네트워킹 API를 사용하는 Windows 스토어 앱에 적용됩니다. 이 항목은 Windows 8.1, Windows Phone 8.1 또는 Windows Server 2012 R2에서 JavaScript 및 HTML로 작성된 앱에 적용됩니다.

    C++/XAML로 작성된 Windows 스토어 앱과 Windows 8.1, Windows Phone 8.1 또는 Windows Server 2012 R2에서 C#, VB.NET 또는 관리되는 C++의 .NET Framework 4.5를 사용하는 앱에서 예외를 처리하는 방법에 대한 자세한 내용은 네트워크 앱에서 예외 처리를 참조하세요.

네트워크 앱에서 예외

앱에서 예외가 발생하면 중요한 문제나 오류를 나타냅니다. 예외는 여러 가지 이유로 발생할 수 있습니다. 코드에 예외를 발생시키는 문제가 있을 수 있습니다. 다른 경우, 특히 네트워킹 API를 사용하는 경우 예외는 네트워크 연결의 변경 및 다른 네트워킹 문제로 인해 발생할 수 있습니다.

네트워킹 API를 사용하는 경우 예외의 원인은 다음과 같습니다.

  • 매개 변수 유효성 검사 오류
  • 호스트 이름 또는 URI를 조회할 때 이름 확인 실패
  • 네트워크 연결 끊김
  • 소켓과 HTTP 클라이언트 API를 사용하는 네트워크 연결 오류
  • 네트워크 서버 또는 원격 끝점 오류
  • 기타 네트워킹 오류

네트워크 오류(예: 연결 끊김, 연결 실패 및 HTTP 서버 오류)로 인한 예외는 언제든지 발생할 수 있습니다. 이러한 오류로 인해 예외가 발생합니다. 앱에서 처리되지 않은 예외로 인해 전체 앱이 런타임에 종료될 수 있습니다.

따라서 대부분의 비동기 메서드를 호출할 때 예외를 처리하는 코드를 작성해야 합니다. 경우에 따라 예외가 발생하면 네트워크 방법을 다시 시도하여 문제를 해결하고 시도할 수 있습니다. 다른 경우 앱이 이전에 캐시된 데이터를 사용하여 네트워크 연결 없이 계속되도록 계획해야 합니다.

Windows 런타임 앱에서는 일반적으로 단일 예외가 발생합니다. 예외 처리기는 예외의 원인에 대해 보다 자세한 정보를 검색하므로 오류를 더 잘 이해하고 적절한 의사 결정을 내릴 수 있습니다.

JavaScript는 보다 자세한 정보에 액세스하는 메서드를 지원합니다. 예외는 Windows 런타임 앱에서 HRESULT 값으로 표시됩니다. Winerror.h 포함 파일에는 네트워크 오류를 포함하여 가능한 HRESULT 값의 매우 큰 목록이 포함되어 있습니다.

네트워킹 API는 예외의 원인에 대해 자세한 정보를 검색하는 여러 가지 메서드를 지원합니다.

  • 예외의 HRESULT 값을 열거형 값으로 변환하는 도우미 메서드
  • HRESULT 값을 검색하는 데 사용된 언어에 따라 달라지는 원시 메서드

Windows.Networking.Sockets의 예외

Windows.Networking.Sockets 네임 스페이스에는 소켓 및 WebSocket을 사용할 때 오류를 처리하는 편리한 도우미 메서드와 열거형이 있습니다. 특정 네트워크 예외를 앱에서 다르게 처리하는 데 유용합니다.

DatagramSocket, StreamSocket 또는 StreamSocketListener 작업에서 발생한 오류는 HRESULT 값으로 반환됩니다. SocketError.GetStatus 메서드는 네트워크 오류를 소켓 작업에서 SocketErrorStatus 열거형 값으로 변환하는 데 사용됩니다. 대부분의 SocketErrorStatus 열거형 값은 기본 Windows 소켓 작업에서 반환한 오류에 해당합니다. 앱은 특정 SocketErrorStatus 열거형 값을 필터링하여 예외의 원인에 따라 앱 동작을 수정할 수 있습니다.

MessageWebSocket 또는 StreamWebSocket 작업에서 발생한 오류는 HRESULT 값으로 반환됩니다. WebSocketError.GetStatus 메서드는 네트워크 오류를 WebSocket 작업에서 WebErrorStatus 열거형 값으로 변환하는 데 사용됩니다. 대부분의 WebErrorStatus 열거형 값은 기본 HTTP 클라이언트 작업에서 반환한 오류에 해당합니다. 앱은 특정 WebErrorStatus 열거형 값을 필터링하여 예외의 원인에 따라 앱 동작을 수정할 수 있습니다.

다음 샘플 코드는 WebErrorStatus 열거형을 사용하여 예외를 필터링하는 방법을 보여 줍니다.

var uri = new Uri("https://www.contoso.com");
var messageWebSocket = new Windows.Networking.Sockets.MessageWebSocket();


// Always catch network exceptions for async methods
messageWebSocket.ConnectAsync(uri).done(function () {
        // get completed
    }, onError);

function onError(reason) {
    // Details in reason.message and reason.number       
    var errorStatus = Windows.Networking.Sockets.WebSocketError.getStatus(reason.number);
    if (errorStatus === Windows.Web.WebErrorStatus.cannotConnect || 
        errorStatus === Windows.Web.WebErrorStatus.notFound || 
        errorStatus === Windows.Web.WebErrorStatus.requestTimeout) {
        WinJS.log && WinJS.log("Cannot connect to the server");
    }
    else {
        WinJS.log && WinJS.log("Failed to connect: " + errorStatus);
    }
}

매개 변수 유효성 검사 오류의 경우 앱은 또한 예외에서 HRESULT를 사용하여 예외의 원인이 된 오류에 대한 더 자세한 정보를 알 수 있습니다. JavaScript로 작성된 앱에서 Error 개체는 앱 실행 중에 예외가 발생할 때의 오류를 나타냅니다. Error.number 속성은 특정 예외에 할당된 HRESULT를 반환합니다. 가능한 HRESULT 값은 Winerror.h 헤더 파일에 나열되어 있습니다. 대부분의 매개 변수 유효성 검사 오류에서 반환되는 HRESULTE_INVALIDARG입니다.

Windows.Networking.BackgroundTransfer의 예외

Windows.Networking.backgroundTransfer 네임스페이스에는 편리한 도우미 메서드가 있으며 오류를 처리하는 데 Windows.Networking.Sockets 네임스페이스의 열거형을 사용합니다. 특정 네트워크 예외를 앱에서 다르게 처리하는 데 유용합니다.

Windows.Networking.backgroundTransfer 네임스페이스의 비동기 메서드에서 발생한 오류는 HRESULT 값으로 반환됩니다. BackgroundTransferError.GetStatus 메서드는 백그라운드 전송 작업의 네트워크 오류를 WebErrorStatus 열거형 값으로 변환하는 데 사용됩니다. 대부분의 WebErrorStatus 열거형 값은 기본 HTTP 또는 FTP 클라이언트 작업에서 반환한 오류에 해당합니다. 앱은 특정 WebErrorStatus 열거형 값을 필터링하여 예외의 원인에 따라 앱 동작을 수정할 수 있습니다.

매개 변수 유효성 검사 오류의 경우 앱은 또한 예외에서 HRESULT를 사용하여 예외의 원인이 된 오류에 대한 더 자세한 정보를 알 수 있습니다. JavaScript로 작성된 앱에서 Error 개체는 앱 실행 중에 예외가 발생할 때의 오류를 나타냅니다. Error.number 속성은 특정 예외에 할당된 HRESULT를 반환합니다. 가능한 HRESULT 값은 Winerror.h 헤더 파일에 나열되어 있습니다. 대부분의 매개 변수 유효성 검사 오류에서 반환되는 HRESULTE_INVALIDARG입니다.

Windows.Web.Http의 예외

Windows.Web.Http 네임스페이스에는 편의 기능이 부족합니다. 따라서 이 네임스페이스에서 HttpClient 및 다른 클래스를 사용하는 앱은 HRESULT 값을 사용해야 합니다.

JavaScript로 작성된 앱에서 Error 개체는 앱 실행 중에 예외가 발생할 때의 오류를 나타냅니다. Error.number 속성은 특정 예외에 할당된 HRESULT를 반환합니다. Error.description 속성은 예외를 설명하는 메시지를 반환합니다. 그러나 일부 예외에는 Error.description 속성의 값이 없을 수 있습니다. 대부분의 가능한 HRESULT 값은 Winerror.h 헤더 파일에 나열되어 있습니다. 앱은 특정 HRESULT 값을 필터링하여 예외의 원인에 따라 앱 동작을 수정할 수 있습니다.

대부분의 매개 변수 유효성 검사 오류에서 반환되는 HRESULTE_INVALIDARG입니다. 일부 잘못된 메서드 호출의 경우 반환되는 HRESULTE_ILLEGAL_METHOD_CALL입니다.

다음 샘플 코드는 HRESULT를 사용하여 예외를 필터링하는 방법을 보여 줍니다.

var uri = new Uri("http://example.com/datalist.aspx");
var httpClient = new HttpClient();

// Always catch network exceptions for async methods
httpClient.GetStringAsync(uri).done(function () {
        // get completed
    }, onError);


function onError(reason) {
    // Details in error.message and error.number       
    var errorStatus = reason.number;
    if (errorStatus === INET_E_RESOURCE_NOT_FOUND || 
        errorStatus === INET_E_CANNOT_CONNECT ) {
        WinJS.log && WinJS.log("Cannot connect to the server");
    }
    else {
        WinJS.log && WinJS.log("Failed to connect: " + errorStatus);
    }
}

관련 항목

다른 리소스

네트워킹 지원 추가

백그라운드 연결 옵션을 설정하는 방법

백그라운드에서 데이터 전송

네트워크 연결 문제 해결 및 디버깅

참조

HttpClient

MessageWebSocket

StreamSocket

StreamWebSocket

Windows.Networking.BackgroundTransfer

Windows.Networking.Sockets

Windows.Web.Http