So wird’s gemacht: Behandeln von Ausnahmen in Netzwerk-Apps (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

In diesem Thema wird erläutert, wie Ausnahmen bei der Verwendung von Netzwerk-APIs in einer Windows Store-App in JavaScript und HTML behandelt werden.

Wissenswertes

Technologien

Voraussetzungen

  • Die folgenden Informationen gelten für Windows Store-Apps, die Netzwerk-APIs zum Herstellen von Remoteverbindungen verwenden. Dieses Thema bezieht sich auf in JavaScript und HTML geschriebene Apps für Windows 8.1, Windows Phone 8.1 oder Windows Server 2012 R2.

    Weitere Informationen zum Behandeln von Ausnahmen in Windows Store-Apps mit C++/XAML sowie zu Apps mit .NET Framework 4.5 in C#, VB.NET oder verwaltetem C++ für Windows 8.1, Windows Phone 8.1 oder Windows Server 2012 R2 finden Sie unter Behandeln von Ausnahmen in Netzwerk-Apps.

Ausnahmen in Netzwerk-Apps

Wenn eine Ausnahme in einer App auftritt, weist dies auf ein erhebliches Problem oder einen Fehler hin. Ausnahmen können aus vielen verschiedenen Gründen auftreten. Unter Umständen verursachen Probleme in Ihrem Code die Ausnahme. Bei der Verwendung von Netzwerk-APIs können Ausnahmen insbesondere auf Änderungen der Netzwerkkonnektivität und andere Netzwerkprobleme zurückzuführen sein.

Aus folgenden Gründen können bei der Verwendung von Netzwerk-APIs Ausnahmen auftreten:

  • Fehler bei der Parameterüberprüfung
  • Fehler bei der Namensauflösung beim Suchen nach einem Hostnamen oder URI
  • Unterbrechung der Netzwerkverbindung
  • Netzwerkverbindungsfehler mit Sockets und HTTP-Client-APIs
  • Netzwerkserver- oder Remoteendpunktfehler
  • Andere Netzwerkfehler

Ausnahmen aufgrund von Netzwerkfehlern (z. B. Unterbrechung der Netzwerkverbindung, Verbindungsfehler und HTTP-Serverfehler) können jederzeit auftreten. Diese Fehler haben zur Folge, dass Ausnahmen ausgelöst werden. Wenn sie nicht von Ihrer App behandelt wird, kann eine Ausnahme dazu führen, dass die gesamte App von der Runtime beendet wird.

Sie müssen Code zum Behandeln von Ausnahmen schreiben, wenn Sie überwiegend asynchrone Netzwerkmethoden aufrufen. In manchen Fällen kann eine Netzwerkmethode beim Auftreten einer Ausnahme wiederholt werden, um das Problem zu beheben. In anderen Fällen muss die App ohne Netzwerkverbindung mit zuvor zwischengespeicherten Daten weiter ausgeführt werden.

Windows-Runtime-Apps lösen im Allgemeinen nur eine Ausnahme aus. Ihr Ausnahmehandler kann detailliertere Informationen zur Ursache abrufen, um die Ausnahme besser verstehen und entsprechende Entscheidungen treffen zu können.

JavaScript unterstützt eine Methode, mit der auf diese detaillierteren Informationen zugegriffen werden kann. Eine Ausnahme wird als HRESULT-Wert in Windows-Runtime-Apps projiziert. Die Winerror.h-Includedatei enthält eine sehr umfangreiche Liste möglicher HRESULT-Werte, die Netzwerkfehler beinhaltet.

Die Netzwerk-APIs unterstützen verschiedene Methoden zum Abrufen der detaillierten Informationen zur Ursache der Ausnahme.

  • Eine Hilfsmethode, die den HRESULT-Wert der Ausnahme in einen Enumerationswert konvertiert
  • Die Ursprungsmethode, je nach Programmiersprache, die zum Abrufen des HRESULT-Werts verwendet wird

Ausnahmen in "Windows.Networking.Sockets"

Der Windows.Networking.Sockets-Namespace enthält praktische Hilfsmethoden und Enumerationen für die Behandlung von Fehlern bei der Verwendung von Sockets und WebSockets. Mit ihnen lassen sich spezifische Netzwerkausnahmen in der App unterschiedlich behandeln.

Ein Fehler in einem DatagramSocket-, StreamSocket- oder StreamSocketListener-Vorgang wird als HRESULT-Wert zurückgegeben. Mit der SocketError.GetStatus-Methode wird ein Netzwerkfehler aus einem Socketvorgang in einen SocketErrorStatus-Enumerationswert konvertiert. Die meisten SocketErrorStatus-Enumerationswerte entsprechen einem vom systemeigenen Windows Sockets-Vorgang zurückgegebenen Fehler. Eine App kann nach bestimmten SocketErrorStatus-Enumerationswerten filtern, um das App-Verhalten je nach Ausnahmeursache zu ändern.

Ein Fehler in einem MessageWebSocket- oder StreamWebSocket-Vorgang wird als HRESULT-Wert zurückgegeben. Mit der WebSocketError.GetStatus-Methode wird ein Netzwerkfehler aus einem WebSocket-Vorgang in einen WebErrorStatus-Enumerationswert konvertiert. Die meisten WebErrorStatus-Enumerationswerte entsprechen einem vom systemeigenen HTTP-Clientvorgang zurückgegebenen Fehler. Eine App kann nach bestimmten WebErrorStatus-Enumerationswerten filtern, um das App-Verhalten je nach Ausnahmeursache zu ändern.

Der folgende Beispielcode zeigt, wie Sie mithilfe der WebErrorStatus-Enumeration nach einer Ausnahme filtern.

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);
    }
}

Bei Parameterprüfungsfehlern kann eine App den HRESULT-Wert aus der Ausnahme auch verwenden, um ausführlichere Informationen zum zugehörigen Fehler zu erhalten. In Apps mit JavaScript stellt das Error-Objekt einen Fehler während der App-Ausführung dar, wenn eine Ausnahme auftritt. Die Error.number-Eigenschaft gibt den HRESULT-Wert zurück, der der jeweiligen Ausnahme zugewiesen ist. Mögliche HRESULT-Werte sind in der Winerror.h-Headerdatei aufgelistet. Für die meisten Parameterprüfungsfehler wird der HRESULT-Wert E_INVALIDARG zurückgegeben.

Ausnahmen in "Windows.Networking.BackgroundTransfer"

Der Windows.Networking.backgroundTransfer-Namespace enthält praktische Hilfsmethoden und verwendet Enumerationen im Windows.Networking.Sockets-Namespace zum Behandeln von Fehlern. Mit ihnen lassen sich spezifische Netzwerkausnahmen in der App unterschiedlich behandeln.

Ein Fehler bei einer asynchronen Methode im Windows.Networking.backgroundTransfer-Namespace wird als HRESULT-Wert zurückgegeben. Mit der BackgroundTransferError.GetStatus-Methode wird ein Netzwerkfehler aus einem Hintergrundübertragungsvorgang in einen WebErrorStatus-Enumerationswert konvertiert. Die meisten WebErrorStatus-Enumerationswerte entsprechen einem vom systemeigenen HTTP- oder FTP-Clientvorgang zurückgegebenen Fehler. Eine App kann nach bestimmten WebErrorStatus-Enumerationswerten filtern, um das App-Verhalten je nach Ausnahmeursache zu ändern.

Bei Parameterprüfungsfehlern kann eine App den HRESULT-Wert aus der Ausnahme auch verwenden, um ausführlichere Informationen zum zugehörigen Fehler zu erhalten. In Apps mit JavaScript stellt das Error-Objekt einen Fehler während der App-Ausführung dar, wenn eine Ausnahme auftritt. Die Error.number-Eigenschaft gibt den HRESULT-Wert zurück, der der jeweiligen Ausnahme zugewiesen ist. Mögliche HRESULT-Werte sind in der Winerror.h-Headerdatei aufgelistet. Für die meisten Parameterprüfungsfehler wird der HRESULT-Wert E_INVALIDARG zurückgegeben.

Ausnahmen in "Windows.Web.Http"

Der Windows.Web.Http-Namespace bietet keine Funktion, die die Behandlung von Ausnahmen erleichtert. Eine App, die HttpClient und andere Klassen in diesen Namespace verwendet, muss daher den HRESULT-Wert verwenden.

In Apps mit JavaScript stellt das Error-Objekt einen Fehler während der App-Ausführung dar, wenn eine Ausnahme auftritt. Die Error.number-Eigenschaft gibt den HRESULT-Wert zurück, der der jeweiligen Ausnahme zugewiesen ist. Die Error.description-Eigenschaft gibt die Meldung zurück, die die Ausnahme beschreibt. Einige Ausnahmen verfügen aber möglicherweise nicht über einen Wert für die Error.description-Eigenschaft. Die meisten möglichen HRESULT-Werte sind in der Winerror.h-Headerdatei aufgelistet. Eine App kann nach bestimmten HRESULT-Werten filtern, um das App-Verhalten je nach Ausnahmeursache zu ändern.

Für die meisten Parameterprüfungsfehler wird der HRESULT-Wert E_INVALIDARG zurückgegeben. Bei manchen unzulässigen Methodenaufrufen wird der HRESULT-Wert E_ILLEGAL_METHOD_CALL zurückgegeben.

Der folgende Beispielcode zeigt, wie Sie mithilfe von HRESULT nach einer Ausnahme filtern.

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);
    }
}

Verwandte Themen

Weitere Ressourcen

Hinzufügen von Unterstützung für Netzwerke

So wird's gemacht: Festlegen von Optionen für Hintergrundkonnektivität

Übertragen von Daten im Hintergrund

Problembehandlung und Debuggen von Netzwerkverbindungen

Referenz

HttpClient

MessageWebSocket

StreamSocket

StreamWebSocket

Windows.Networking.BackgroundTransfer

Windows.Networking.Sockets

Windows.Web.Http