Entwickeln von verbundenen Anwendungen

In diesem Artikel erfahren Sie, welche Netzwerkaspekte für Windows Store-Apps berücksichtigt werden müssen.

Einführung

Mit Windows 8 wird die neue Windows-Runtime mit einfachen und dennoch leistungsstarken APIs eingeführt, die Entwickler zum Erstellen von Apps in C++, C# oder JavaScript verwenden können. Eine der wichtigsten Eigenschaften von Windows Store-Apps ist, dass es sich bei den meisten von ihnen um "verbundene Apps" handelt.

In diesem Dokument wird eine verbundene (oder für Netzwerke ausgelegte) App als Windows Store-App definiert, die das Netzwerk für beliebige Zwecke nutzen möchte. Jede verbundene App sollte den im Folgenden beschriebenen Richtlinien entsprechen, um Benutzern ein vorhersehbares und angenehmes Benutzererlebnis zu ermöglichen.

Auswählen der richtigen Netzwerkfunktionen

Apps müssen Netzwerkisolationsfunktionen deklarieren, um Zugriff auf Netzwerkressourcen zu haben. Mit der folgenden Prüfliste können Sie sicherstellen, dass die Netzwerkisolation für Ihre App konfiguriert ist.

  • Bestimmen Sie die für die App erforderliche Richtung des Netzwerkzugriffs. Hierbei kann es sich um ausgehende, vom Client initiierte Anforderungen, eingehende, unaufgeforderte Anforderungen oder eine Kombination aus beiden Anforderungen handeln.
  • Bestimmen Sie den Netzwerkressourcentyp, mit dem Ihre App kommunizieren wird. Überlegen Sie, ob Ihre App mit vertrauenswürdigen Ressourcen in einem Heimnetzwerk, einem Firmennetzwerk oder einer Kombination dieser Netzwerktypen kommunizieren muss.
  • Konfigurieren Sie die minimal erforderlichen Netzwerkisolationsfunktionen im App-Manifest. Hierzu können Sie während der App-Entwicklung Microsoft Visual Studio Express 2012 für Windows 8 verwenden.
  • Stellen Sie Ihre App bereit, und führen Sie sie aus, um sie mithilfe der für die Problembehandlung bereitgestellten Netzwerkisolationstools zu testen.

Die deklarierten Funktionen werden von Windows erzwungen. Apps sollten dem Prinzip der geringsten Rechten entsprechen und nur über die Funktionen verfügen, die sie auch wirklich benötigen. In der folgenden Tabellen werden die Netzwerkisolationsfunktionen detailliert beschrieben.

NetzwerkfunktionBeschreibung

Internet (Client)

Bietet ausgehenden Zugriff auf das Internet und Netzwerke an öffentlichen Orten wie Flughäfen und Cafés. Diese Funktion sollte von den meisten Apps deklariert werden, die einen Internetzugriff benötigen.

Hinweis  

Wird im App-Manifest als internetClient deklariert.

Internet (Client und Server)

Bietet ein- und ausgehenden Zugriff auf das Internet und Netzwerke an öffentlichen Orten wie Flughäfen und Cafés. Der eingehende Zugriff auf kritische Ports ist immer gesperrt.

Diese Funktion ist eine Obermenge der Funktion "Internet (Client)". Daher müssen nicht beide deklariert werden.

Hinweis  

Wird im App-Manifest als internetClientServer deklariert.

Private Netzwerke (Client und Server)

Bietet ein- und ausgehenden Netzwerkzugriff an Orten, die der Benutzer als vertrauenswürdig ansieht, z. B. zuhause oder am Arbeitsplatz. Der eingehende Zugriff auf kritische Ports ist immer gesperrt.

Wird im App-Manifest als privateNetworkClientServer deklariert.

 

Für Ihre verbundene App sind eventuell auch andere Zertifikate erforderlich. Hierzu gehören Zertifikate, die das Erkennen von Geräten in der Nähe ermöglichen, sowie freigegebene Benutzerzertifikate. Weitere Informationen zur Netzwerkisolation und zum Deklarieren von Funktionen finden Sie unter Konfigurieren von Netzwerkisolationsfunktionen.

Auswählen der richtigen API

Die Windows-Runtime unterstützt eine ganze Reihe von Netzwerk-APIs für die Kommunikation mit Remoteendpunkten im Internet oder in privaten Netzwerken. In Fällen, in denen bestimmte Protokolle aus höheren Ebenen für den Entwickler über eine API nicht zugänglich sind, unterstützt die Windows-Runtime auch TCP- und UDP-Sockets (zusammen mit Multicast), um es den Entwicklern zu ermöglichen, andere Protokolle aus höheren Ebenen zu implementieren.

Welche Apps sind davon betroffen?

Es sind alle Windows Store-Apps betroffen, die Daten über ein Netzwerk senden oder empfangen.

Leitfaden

Bestimmen Sie zunächst, welche Funktionen Ihre App haben soll. Wenn die Funktionen mit einem der Featurebereiche unten übereinstimmen, dann verwenden Sie diese APIs direkt.

APIsFunktionalität

Windows.Web.AtomPub, Windows.Web.Syndication

APIs zum Abrufen von Feeds im RSS- oder Atom-Format in verschiedenen Versionen. Die Windows-Runtime unterstützt auch das Atom Publication Protocol, wodurch die Veröffentlichung von Atom-Sammlungen ermöglicht wird. Des Weiteren erleichtern die APIs, die Implementierung der Unterstützung für neuere Format wie OData.

Windows.Networking.BackgroundTransfer

APIs, die für das ununterbrochene, kostenbewusste und wiederaufnehmbare Herunterladen/Hochladen von Inhalten verwendet werden, auch wenn die aufrufende Anwendung nicht im Vordergrund ausgeführt wird. Diese API unterstützt Downloads mit dem HTTP-, HTTPS- und FTP-Protokoll.

XMLHTTPRequest (JavaScript), HttpClient (C#), IXHR2 (C++).

APIs, die für die Interaktion mit RESTful-Webdiensten und anderen HTTP-basierten Protokollen verwendet werden.

Windows.Networking.Proximity

APIs, die für die Erkennung von naher Entfernung zwischen zwei Geräten verwendet werden. Wird dies erkannt, können Anwendungen eine Netzwerkkommunikation zwischen den Geräten über Socket-APIs starten.

Windows.Storage.Pickers

APIs, die für die Kommunikation mit Remotedateifreigaben verwendet werden (wie das Speichern einer Datei auf einer Remotedateifreigabe), müssen Dateiauswahl-APIs verwenden.

 

Wenn in der Liste keine API mit der von Ihnen gewünschten API aufgeführt ist, verwenden Sie die neuen Windows.Networking.Sockets-APIs. Allerdings muss für Apps, die diese APIs verwenden, Folgendes beachtet werden:

  • Mit Windows 8 wird eine neue Art von Socket namens "WebSocket" eingeführt. Im Folgenden finden Sie einige Hinweise, die Ihnen bei der Entscheidung helfen, wann welcher Socket zu verwenden ist (UDP, TCP oder WebSockets).

    • Wenn Sie eine Verbindung mit einem Dienst herstellen möchten, der ein Protokoll verwendet, das von den in diesem Abschnitt beschriebenen APIs nicht unterstützt wird, wie SMTP, MAPI oder telnet, verwenden Sie TCP- oder UDP-Sockets.

    • Wenn Sie eine Verbindung mit einem anderen Gerät im gleichen lokalen Netzwerk herstellen möchten, verwenden Sie TCP- oder UDP-Sockets.

    • Wenn Sie ein einfaches Anfrage- und Antwortprotokoll benötigen, das über HTTP-Proxys kommunizieren kann, dann verwenden Sie die oben beschriebenen APIs für RESTful-Webdienste. (C++, C#, JavaScript).

    • Wenn Sie eine App erstellen, die eine Socket-ähnliche Semantik erfordert (asynchron, bidirektional), um über das Internet eine Verbindung mit einem neuen Dienst herzustellen (einschließlich über HTTP-Proxys), den Sie ebenfalls erstellen, dann verwenden Sie WebSockets.

  • Verwenden Sie Namen, um Endpunkte zu adressieren. Vermeiden Sie es, IP-Adressen zu verwenden (einschließlich IP-Literalen in URIs), um Endpunkte zu adressieren, da sich IP-Adressen ändern können. Der Name ändert sich in der Regel nicht. Wenn Sie den Namen verwenden, wird daher also sichergestellt, dass eine Verbindung zur aktuellen IP-Adresse des Endpunkts hergestellt wird.

  • Windows-APIs verwenden in der Regel Unicode-Zeichenfolgen als systemeigenes Format (auch für HostNames und URIs). Dennoch ist für manche Protokolle möglicherweise ein anderes Format erforderlich. Verwenden Sie in diesem Fall die Methoden der Klassen DataReader/DataWriter, um die Zeichenfolgen in das jeweilige für das Protokoll erforderliche Format zu konvertieren.

  • HostNames und URIs müssen für das Überprüfen der Gleichheit als Klassenobjekte implementiert werden und nicht als Zeichenfolgen, da für Objekte andere Regeln bezüglich der Gleichheit gelten.

  • Registrieren Sie Netzwerkänderungsbenachrichtigungen, und befolgen Sie die in Reagieren auf Änderungen des Netzwerkstatus erläuterten Richtlinien.

Anpassen des App-Verhaltens für getaktete Netzwerke

Getaktete Netzwerke gibt es im Internet bereits seit einiger Zeit. Zum Beispiel schränken die meisten Internetdienstanbieter die Datenmenge, die Benutzer pro Monat übertragen dürfen, in der Regel enorm ein. Die aktuell steigende Beliebtheit von mobilen Breitbandtechnologien hat das Problem insofern größer werden lassen, als Benutzern enorme Kosten entstehen können, wenn Sie das Datenlimit überschreiten oder Datendienste im Ausland nutzen. Daher müssen Apps die verfügbaren Netzwerkressourcen überwachen und sich entsprechend verhalten.

In der Tabelle unten werden die möglichen Verbindungskosten aufgelistet, wie sie in Windows.Networking.Connectivity.ConnectionCost definiert sind.

EigenschaftBeschreibung

ApproachingDataLimit

Ruft einen Wert ab, der angibt, ob eine Verbindung sich dem im Datentarif angegebenen Nutzungslimit nähert.

NetworkCostType

Ruft einen Wert ab, der die aktuellen Netzwerkkosten für eine Verbindung anzeigt.

  • Unrestricted: Die Nutzung dieser Netzwerkverbindung ist unbegrenzt. Die Nutzungsgebühr und Kapazität sind uneingeschränkt.

  • Fixed: Die Nutzung dieser Netzwerkverbindung ist bis zu einem bestimmten Limit uneingeschränkt.

  • Variable: Die Nutzung dieser Netzwerkverbindung wird pro Byte getaktet.

  • Unknown: Für diese Netzwerkverbindung sind keine Kosteninformationen verfügbar.

OverDataLimit

Ruft einen Wert ab, der angibt, ob die Verbindung das im Datentarif angegebene Nutzungslimit überschreitet.

Roaming

Ruft einen Wert ab, der angibt, ob die Verbindung mit einem Netzwerk außerhalb des Heimnetzwerkanbieters verbunden ist.

 

Welche Apps sind davon betroffen?

In der Regel müssen alle Apps (insbesondere die Apps, die große Datenmengen übertragen) den Richtlinien unten entsprechen.

Benutzer können die Datenmenge, die jede App verbraucht, bestimmen. Ein unangebrachter Verbrauch von getakteter Netzwerkbandbreite kann den Ruf Ihrer App und Ihres Unternehmens beeinträchtigen.

Guidance

Apps, die eine Verbindung mit Endpunkten über das Internet herstellen, müssen mithilfe von GetInternetConnectionProfile Kosteninformationen über das Netzwerk, über das sie Daten senden und empfangen, abrufen. Beachten Sie die folgenden Richtlinien, je nachdem, welche Datenlimits vom Betreiber festgelegt wurden:

VerhaltenRichtlinien
Normal

In normalen Szenarien sollte die App keine Einschränkungen implementieren. Die Verbindung sollte mit unbegrenzten Kosten und uneingeschränkter Nutzungsgebühr und Kapazität behandelt werden.

Wenn NetworkCostType auf "Unrestricted" oder "Unknown" festgelegt ist und ConnectionCost nicht auf "Roaming" gesetzt ist, sollte die App das normale Verhalten implementieren.

Beispiele:

  • Die Media Player-App kann einen kompletten HD-Film wiedergeben.

  • Eine App kann eine große Datei ohne Einschränkungen oder Eingabeaufforderungen herunterladen.

Konservativ

In konservativen Szenarien sollte die App Einschränkungen zum Optimieren der Netzwerknutzung implementieren, um Vorgänge in getakteten Netzwerken zu behandeln.

Wenn NetworkCostType auf "Fixed" oder "Variable" festgelegt ist und ConnectionCost nicht auf "Roaming" oder "OverDataLimit" gesetzt ist, sollte die App das konservative Verhalten implementieren.

Beispiele:

  • Die Media Player-App kann Filme in niedrigeren Auflösungen wiedergeben.

  • Eine App kann nicht wichtige Downloads verzögern.

  • Eine App kann das Vorabrufen von Informationen über ein Netzwerk vermeiden.

  • E-Mail-Apps können in einen Modus wechseln, in dem beim Empfangen von E-Mail-Nachrichten nur Header abgerufen werden.

Abonnement

In Abonnementszenarien sollte die App Ausnahmefälle behandeln, in denen die Kosten für den Netzwerkzugriff wesentlich höher als die Plankosten sind. Nutzt ein Benutzer beispielsweise das Roaming, kann ein Mobilfunkanbieter einen sehr viel höheren Tarif berechnen.

Wenn ConnectionCost auf "Roaming" oder "OverDataLimit" festgelegt ist, sollte die App eine Zustimmung einholen.

Beispiele:

  • Die App sollte vom Benutzer die Zustimmung für den Zugriff auf das Netzwerk einholen.

  • Die App sollte alle Hintergrunddaten-Netzwerkaktivitäten anhalten.

 

Reagieren auf Änderungen des Netzwerkstatus

Wenn von Windows 8 neue Netzwerke erkannt werden, werden automatisch neue Konnektivitätsoptionen bereitgestellt. Wenn ein Benutzer beispielsweise über ein 3G-Netzwerk Daten streamt und später in den Bereich eines WLAN kommt, wird die neue Konnektivitätsoption der App verfügbar gemacht, wenn dies sinnvoll ist.

In einem Szenario mit mobilen Geräten können Verbindungen mit Netzwerken laufend aufgebaut und getrennt werden. Der Empfang eines 3G-Netzwerks kann bei einem Benutzer zu Hause oder in seiner Garage möglicherweise verloren gehen, während WLAN weiterhin verfügbar ist. Gleichermaßen kann die WLAN-Verbindung abreißen, wenn der Benutzer das Haus verlässt. Darüber hinaus kann es vorkommen, dass gelegentlich kein Netzwerk verfügbar ist. Angesichts der Verbreitung von WiFi und mobilen Breitbandnetzwerken treten solche Netzwerkänderungen (Netzwerke werden zugänglich, Verbindungen werden getrennt, oder es ist kein Netzwerk verfügbar) sehr häufig auf. Das Umschalten von Verbindungen zu einem neuen Netzwerk erfolgt nicht automatisch nahtlos; hierbei ist das Eingreifen der Anwendung erforderlich. Beachten Sie, dass die Standardrichtlinie in Windows 8 vorschreibt, dass das uneingeschränkte Netzwerk anstelle des getakteten Netzwerks und das schnellere Netzwerk anstelle des langsameren Netzwerks ausgewählt wird.

Welche Apps sind davon betroffen?

Alle Windows Store-Apps, die über ein Netzwerk kommunizieren, sind betroffen. Werden diese Richtlinien nicht eingehalten, kann dies bei Netzwerkänderungen stets zu einer Beeinträchtigung des Benutzererlebnisses führen.

Leitfaden

Alle Windows Store-Apps sollten die folgten Schritte ausführen:

  1. Wenn die von der App verwendete Verbindung nicht mehr verfügbar ist (an einem Fehler zu erkennen):

    1. Überprüfen Sie die Kosten für Internetverbindungen.

    2. Wiederholen Sie den Vorgang. Sollte dies nicht funktionieren, wartet sie auf eine weitere NetworkStatusChanged-Benachrichtigung.

  2. Die Kosten für eine Internetverbindung prüfen, und das Verhalten wie im Abschnitt Anpassen des Anwendungsverhaltens für getaktete Netzwerke oben empfohlen anpassen.

  3. Netzwerkänderungsbenachrichtigungen registrieren (onNetworkStatusChanged).

  4. Den Netzwerkbetrieb über eine der in Abschnitt Auswählen der richtigen API beschriebene API aufnehmen.

  5. Eine Netzwerkänderungsbenachrichtigung signalisiert, dass sich die verfügbaren Kosten oder die Konnektivitätsoptionen möglicherweise geändert haben. Gehen Sie bei Empfang dieser Benachrichtigung wie folgt vor:

    1. Überprüfen Sie die Kosten für Internetverbindungen. Wenn sich die Kostenmerkmale geändert haben (von kostenlos in kostenpflichtig oder von kostenpflichtig in kostenlos), wiederholen Sie den Netzwerkvorgang. Von Windows 8 wird automatisch das beste/günstigste verfügbare Netzwerk verwendet. Wenn der Vorgang bei der Wiederholung erfolgreich ausgeführt wird, brechen Sie den ursprünglichen Netzwerkvorgang ab.

      Hinweis  Erfahrene Entwickler können auch beim Wiederholen von Netzwerkvorgängen das App-Verhalten optimieren. Sie möchten beispielsweise möglicherweise, dass die App ggf. eine bestehende Verbindung abbricht und eine Verbindung zu einem schnelleren Netzwerk herstellt. In diesem Fall können Entwickler die Socket-APIs (BandwidthStatistics) verwenden, um zu bestimmen, ob die Verbindung gewechselt werden soll.

    2. Wenn sich die Kostenmerkmale für Internetverbindungen nicht geändert haben, aber eine Benachrichtigung im Zusammenhang mit Kosten empfangen wird (beispielsweise > 80 % der Obergrenze verbraucht, variable Kosten, Roaming usw.), passen Sie das Verhalten an.

Fehlerbehebung und Debuggen von verbundenen Apps

Netzwerkstörungen können dazu führen, dass Apps hängen, abstürzen oder dem Benutzer nicht mehr bedienbare Dialogfelder sowie verwirrende Fehlermeldungen anzeigen. Das Debuggen dieser Fehler kann sich als äußerst schwierig erweisen, da Fehler überall im Netzwerkstapel auftreten können.

Welche Apps sind davon betroffen?

Alle Windows Store-Apps, die das Netzwerk entweder direkt (über Sockets) oder indirekt (über eine API, die das Netzwerk möglicherweise verwendet) nutzen, sind betroffen. Im Idealfall behebt das Betriebssystem Fehler automatisch im Auftrag des Entwicklers. Wenn dies nicht möglich ist, sollten Apps für die Fehlerbehandlung vorbereitet sein.

Leitfaden

Windows Store-Apps müssen die folgenden Aktionen ausführen:

  • Führen Sie bei Auftreten eines Netzwerkfehlers den Vorgang ggf. erneut aus. Versuchen Sie beispielsweise nicht, den Vorgang zu wiederholen, wenn bei der Authentifizierung ein Fehler aufgetreten ist. Wiederholen Sie den Vorgang jedoch schon, wenn die Netzwerkverbindung, über die Sie kommuniziert haben, unterbrochen wurde, weil möglicherweise ein anderes Netzwerk verfügbar sein könnte. Viele Fehler lassen sich durch Wiederholen eines Vorgangs beheben. Befolgen Sie bei einem erneuten Versuch die in Reagieren auf Änderungen des Netzwerkstatus erläuterten Richtlinien.

  • Vergewissern Sie sich, dass asynchrone APIs verwendet werden, sodass kein Blockieraufruf im UI-Thread erfolgt. Wenn ein Netzwerkvorgang demzufolge zu lange dauert, bevor er abgeschlossen wird, oder wenn ein Fehler auftritt, sollte Ihre Anwendung nicht hängen. Emulieren Sie kein synchrones Verhalten, welches den asynchronen Charakter der Windows Runtime überlagert.

  • Planen Sie idealerweise im Vorab ein Modell zur Fehlerbehandlung. Überlegen Sie beim Entwerfen der App, wie Fehlerinformationen für Benutzer verfügbar gemacht werden sollen. In Outlook wird beispielsweise eine dezente Netzwerkanzeige verwendet; Communicator verfügt über ein Schema zum Ersetzen der gesamten Benutzeroberfläche; Internet Explorer enthält ein aufgabenorientiertes Dialogfeld für Downloads, in dem Netzwerkfehler angezeigt werden. Erfassen Sie Ausnahmen wenn sie auftreten, untersuchen Sie alle Fehlerzeichenfolgen, und informieren Sie den Benutzer in angemessener Weise.

  • Testen Sie Ihre App in verschiedenen Netzwerkumgebungen mit Aktivitäten wie dem Trennen und erneuten Herstellen der Netzwerkverbindung, Anhalten und Fortsetzen oder Wechseln zwischen Netzwerken.

  • Wenn Sie Ihre App testen und Fehler finden, die Ihnen nicht auf Anhieb verständlich sind, aktivieren Sie die ETW-Ablaufverfolgung.

Ressourcen

Die folgenden Artikel bieten Tipps und API-Informationen für Windows-Runtime-Features, die in diesem Thema beschrieben wurden:

Leitfaden zur Featureimplementierung

Hinzufügen der Netzwerkunterstützung
Herstellen einer Verbindung mit einem Webdienst
Herstellen einer Verbindung mit Netzwerkdiensten
Herstellen einer Verbindung mit einem WebSocket-Dienst
Zugreifen auf Verbindungs- und Datentarifinformationen
Übertragen einer Datei aus einer Netzwerkressource
Zugreifen auf und Verwalten von Inhalten von Fremdanbietern

Codebeispiele

Namespacedokumentation

Windows.Networking.BackgroundTransfer
Windows.Networking.Connectivity
Windows.Networking.Proximity
Windows.Networking.Sockets
Windows.Storage.Picker
Windows.Web.AtomPub
Windows.Data.Html
Windows.Web.Syndication
Windows.Foundation (Uri-Klasse)
Windows.Networking (HostName-Klasse)
Windows.Storage.Streams (DataReader-/DataWriter-Klassen)

 

 

Anzeigen:
© 2014 Microsoft