Netzwerk

Nutzen Sie die Vorteile einer einfacheren Implementierung von HTTP für alle unterstützten Sprachen, eine einfachere Netzwerkkommunikation für die App und neue APIs für standortbasierte mobile Szenarien zum Entwickeln vielseitiger verbundener Apps.

Neues oder Aktualisierungen in Windows 8.1

  • Neue HTTP-Client-API
  • Benutzerdefinierte Filter für HTTP-Anforderungen
  • Aktualisierungen für Hintergrundübertragungen
  • Aktualisierungen für die Echtzeitkommunikation
  • Aktualisierungen für das Verbindungsstandby
  • Unterstützung von Geofence
  • Wi-Fi Direct

Neue HTTP-Client-API

[Laden Sie sich das Beispiel zu HTTPClient herunter.]

Mit Windows 8.1 wird Windows.Web.Http eingeführt. Dies ist der Windows-Runtime-Namespace für Windows-Apps, die Verbindungen mit HTTP- und REST-Webdiensten (Representational State Transfer) herstellen. Diese neue API bietet Unterstützung für alle unterstützten Sprachen mit umfassenden Features und gilt als Ersatz für die HTTP-API, die ursprünglich unter Windows 8 veröffentlicht wurde.

Für grundlegende Anforderungsvorgänge verfügt die neue API über eine einfache Schnittstelle zum Durchführen allgemeiner Aufgaben. Darüber werden auch angemessene Standardeinstellungen für die Authentifizierung (AUTH) bereitgestellt, die für die meisten Szenarios geeignet sind. Zu den weiteren Funktionen für komplexere HTTP-Vorgänge gehören:

  • Methoden für häufige Verben (DELETE, GET, PUT und POST)

  • Möglichkeit zum Abrufen, Festlegen und Löschen von Cookies

  • Unterstützung für häufige Authentifizierungseinstellungen und -muster

  • Verfügbarkeit von Statusinformationen zu HTTP-Anforderungen in asynchronen Methoden

  • Zugriff auf SSL-Details (Secure Sockets Layer) zum Transport

  • Möglichkeit zum Einbinden von benutzerdefinierten Filtern in erweiterte Apps

Der Windows.Web.Http.Headers-Namespace unterstützt die Erstellung von HTTP-Headern und -Cookies, die dann als Eigenschaften mit HttpRequestMessage- und HttpResponseMessage-Objekten zugeordnet werden.

Der folgende Beispielcode veranschaulicht die Verwendung der neuen API zum Erstellen einer einfachen HTTP-GET-Anforderung für Inhalte auf einem Webserver, die mithilfe der neuen API als Zeichenfolge zurückgegeben werden.

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 operation.
       }, onError);


function onError(reason) {
    // Details in reason.Message and ex.HResult.       
}

// Once your app is done using the HttpClient object call close to 
// free up system resources (the underlying socket and memory used for the object)
// httpClient.close();
using System;
using Windows.Foundation;
using Windows.Web.Http;

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

// Always catch network exceptions for async methods.
try 
{
    var result = await httpClient.GetStringAsync (uri);
}
catch 
{
    // Details in ex.Message and ex.HResult.       
}

// Once your app is done using the HttpClient object call dispose to 
// free up system resources (the underlying socket and memory used for the object)
httpclient.Dispose();
using namespace Windows::Foundation;
using namespace Windows::Web::Http;

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

// Always network exceptions for async methods.
try 
{
    httpClient->GetStringAsync (uri);
}
catch 
{
    // Details in ex.Message and ex.HResult.       
}

// In C++ and CX, the system resources used by httpClient object are released 
// when the object falls out of scope or by the destructor (delete operator)

Benutzerdefinierte Filter für HTTP-Anforderungen

Mit dem vom neuen Windows.Web.Http.Filters-Namespace unterstützten Filtermodell für Webanforderungen ist es einfacher als jemals zuvor, Webanforderungen für spezielle Verbindungs- und Sicherheitsszenarios zu erstellen, z. B.:

  • Durchführen der Authentifizierung

  • Beschränken des Zugriffs in getakteten Netzwerken

  • Verwenden von automatischen Wiederholungen nach Verbindungsabbrüchen

  • Unterstützen moderner Programmiertechniken wie das "Mocking"

Normalerweise ist es nicht schwierig, eine einzelne Netzwerk- oder Sicherheitsbedingung zu behandeln, die Sie während einer Anforderung erwarten. Die Behandlung einer größeren Zahl dieser Bedingungen kann jedoch eine Herausforderung darstellen. Sie können diese neue API zum Erstellen einer Reihe von einfachen Filtern verwenden und diese dann je nach Bedarf miteinander verketten. Die Entwicklung von Webanforderungsfunktionen für die erwartete Komplexität ist also möglich, ohne dass Sie etwas ähnlich Komplexes erstellen müssen.

HttpClient ist die Hauptklasse, die Sie zum Senden und Empfangen von Anforderungen per HTTP verwenden. Dabei wird mithilfe der HttpBaseProtocolFilter-Klasse ermittelt, wie Daten gesendet und empfangen werden sollen. HttpBaseProtocolFilter stellt also das logische Ende jeder benutzerdefinierten Filterkette dar. Jede HttpClient-Instanz kann, wie hier gezeigt, über eine andere Filterkette oder Pipeline verfügen.

Zeichnung einer HTTP-Filterkette

Zum Schreiben eines benutzerdefinierten Filters erstellen Sie eine benutzerdefinierte Version der IHttpFilter-Schnittstelle. Verwenden Sie die IHttpFilter.SendRequestAsync-Methode, um anzugeben, wie der Filter funktioniert. Sie können C#, Visual Basic .NET oder C++ zum Schreiben eines Filters verwenden. Diese Filter können mit jeder Sprache aufgerufen und verwendet werden, die von der Windows-Runtime unterstützt wird.

Unten ist Beispielcode für einen Filter angegeben, mit dem HTTP-Anforderungen und -Antworten ein benutzerdefinierter Header hinzugefügt wird.

// A filter that adds a custom header to every Http request and response
public class PlugInFilter : IHttpFilter {
    private IHttpFilter innerFilter;

    public PlugInFilter(IHttpFilter innerFilter) {
        if (innerFilter == null) {
            throw new ArgumentException("innerFilter cannot be null.");
        }
        this.innerFilter = innerFilter;
    }

    // The SendRequest method where we add the custom headers
    public IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress> SendRequestAsync(HttpRequestMessage request) {
        return AsyncInfo.Run<HttpResponseMessage, HttpProgress>(async (cancellationToken, progress) =>
        {
            request.Headers.Add("Custom-Header", "CustomRequestValue");
            HttpResponseMessage response = await innerFilter.SendRequestAsync(request).AsTask(cancellationToken, progress);

            cancellationToken.ThrowIfCancellationRequested();

            response.Headers.Add("Custom-Header", "CustomResponseValue");
        return response;
        });
    }

    public void Dispose() {
        innerFilter.Dispose();
        GC.SuppressFinalize(this);
    }
}

Um diesen Filter zu verwenden, übergeben Sie die Filterschnittstelle an den HttpClient(IHttpFilter)-Konstruktor, wenn Sie ein neues HttpClient-Objekt erstellen. Zum Einrichten einer Filterkette verknüpfen Sie neue Filter mit einem vorherigen Filter und mit einem HttpBaseProtocolFilter-Objekt am Ende der Kette.

Dieser Beispielcode zeigt, wie ein HttpClient-Objekt erstellt und eine Verkettung mit einem einzelnen benutzerdefinierten Filter vorgenommen wird.

internal static void CreateHttpClient(ref HttpClient httpClient)
{
    if (httpClient != null) {
        httpClient.Dispose();
    }

    // Extend HttpClient by chaining filters together
    // and then providing HttpClient with the configured filter pipeline.
    var basefilter = new HttpBaseProtocolFilter();

    // Adds a custom header to every request and response message.
    var myfilter = new PlugInFilter(basefilter);
    httpClient = new HttpClient(myfilter);

}

Aktualisierungen für Hintergrundübertragungen

[Laden Sie sich das Beispiel für Hintergrundübertragung herunter.]

Mit Windows 8.1 werden Aktualisierungen für Windows.Networking.BackgroundTransfer eingeführt, mit denen Dateidownloads und -uploads für Entwickler weiter vereinfacht werden und die Benutzerfreundlichkeit für Endbenutzer erhöht wird.

  • Die neue BackgroundTransferGroup-Klasse erleichtert Apps das Erstellen dieser Gruppen und die parallele, serielle oder prioritätsgesteuerte Durchführung von Downloads und Uploads. Wenn Benutzer beispielsweise Episoden einer beliebten Fernsehserie herunterladen und sich diese ansehen, kann eine App jetzt die ersten Episoden der Serie vorrangig behandeln oder Benutzer wählen lassen, welche Episode zuerst heruntergeladen werden soll.

  • Von der App kann jetzt die Live-Kachel aktualisiert werden. Außerdem können Popupbenachrichtigungen verwendet werden, um Statusinformationen für Benutzer bereitzustellen. Sie können diese Benachrichtigungen konfigurieren, indem Sie neue Methoden in den Klassen BackgroundDownloader und BackgroundUploader verwenden.

  • Bei der Hintergrundübertragung wird für einen Download jetzt automatisch zu einem bevorzugten Netzwerk (z. B. einem uneingeschränkten Netzwerk) gewechselt, wenn der Download fortgesetzt werden kann und voraussichtlich mehr als zwei Minuten dauert.

Unterstützung der Echtzeitkommunikation für den verbundenen Standbymodus

[Laden Sie sich das Beispiel zu Echtzeitkommunikation herunter.]

Mithilfe von Netzwerkverbindungen im Hintergrund können Apps bei aktiviertem Windows-Sperrbildschirm jetzt auch dann Netzwerkpakete empfangen, wenn die App nicht mehr ausgeführt wird, weil sich das Gerät in einem Stromsparmodus befindet, z. B. im verbundenen Standbymodus. Beispiele für vorgenommene Aktualisierungen:

  • Unterstützung der Echtzeitkommunikation für die neue Windows.Web.Http-API.

  • Unterstützung für Ruhezeiten, einem neuen Feature in Windows 8.1.

  • Eine neue Benachrichtigung für VoIP-Apps (Voice over IP), mit der Anrufe auch bei gesperrtem Bildschirm beantwortet werden können.

  • Vier Hardware-Slots zur Unterstützung des verbundenen Standbymodus auf den meisten Netzwerkgeräten (die gebräuchlicheren Software-Slots unterstützen den verbundenen Standbymodus nicht).

Aktualisierungen für den verbundenen Standbymodus

Der verbundene Standbymodus ist ein spezieller Stromsparzustand für Windows-Geräte. In diesem Modus können Apps Aufgaben bei eingeschränkter Konnektivität durchführen, während der Bildschirm des Geräts ausgeschaltet ist und sich das Gerät im Standbymodus (Stromsparmodus) befindet. Für die Echtzeitkommunikation und Netzwerkverbindungen im Hintergrund wird der verbundene Standbymodus nur verwendet, wenn dieser vom Netzwerkadapter des Geräts unterstützt wird.

Mit Windows 8.1 werden diese Aktualisierungen des verbundenen Standbymodus eingeführt, damit Sie Benutzern mit Ihren Apps auf Geräten stets ein reaktionsschnelles Verbindungsverhalten bieten können:

  • Unterstützung von Netzwerkadaptern für Ethernet und mobiles Breitband (WiFi-Adapter wurden zuvor bereits unterstützt).

  • Unterstützung für mehr Hardware-Slots für geeignete Netzwerkadapter (mehr Slots bedeuten, dass mehr Apps auf dem Sperrbildschirm den verbundenen Standbymodus nutzen können). Die ersten drei Sperrbildschirm-Apps, die sich für einen Hardware-Slot registrieren, können höchsten drei Hardware-Slots pro App verwenden.

Unterstützung von Geofence

[Laden Sie sich das Beispiel zu Geolocation herunter.]

Mit Windows 8.1 wird die Unterstützung für Geofencing eingeführt. Per Geofence kann von einer App ein Radius für einen Bereich um einen bestimmten geografischen Punkt definiert werden. Vom System kann dann eine Warnung an die App gesendet werden, wenn Benutzer den Bereich mit dem Gerät, auf dem die App ausgeführt wird, betreten oder verlassen. Dank dieser Aktualisierung des Geolocation-Features von Windows können Benutzer von Apps beispielsweise benachrichtigt werden, wenn sich Freunde in der Nähe befinden. Außerdem kann eine Erinnerung an Benutzer gesendet werden, die den Arbeitsplatz oder ihre Wohnung verlassen, oder es können Coupons angezeigt werden, wenn Benutzer sich in der Nähe bestimmter Geschäfte befinden.

Mit den Geofence-Funktionen von Windows 8.1 haben Sie folgende Möglichkeiten:

  • Erstellen oder Entfernen so genannter Geofences oder Zielbereiche

  • Einrichten einer Benachrichtigung, die angezeigt wird, wenn ein Geofence-Bereich betreten oder verlassen wird

  • Mit der neuen Hintergrundaufgabe LocationTrigger-Klasse können Sie Ihre Geofence-App im Hintergrund laufen lassen und weiterhin Geofence-Ereignisse abrufen.

  • Richten Sie Ihre App für den Empfang von Geofence-Updates bei aktiviertem Sperrbildschirm ein.

Der Windows.Devices.Geolocation.Geofencing-Namespace enthält alle Klassen, die Sie für Geofence benötigen. Normalerweise erstellen Sie ein oder mehrere Geofence-Objekte, mit denen die Zielbereiche und die Benachrichtigungsbedingungen definiert werden. Von der App müssen die Ereignisse behandelt werden, die auftreten, wenn Benutzer mit dem Gerät einen der definierten Bereiche betreten oder verlassen. Sie können die App dann mit einem Simulator testen, um die Bewegung in den bzw. aus dem Geofence-Bereich heraus zu simulieren.

Unterstützung von Wi-Fi Direct

[Laden Sie sich das Beispiel für ein Wi-Fi Direct-Gerät herunter.]

Sie können die neue WiFiDirectDevice-Klasse verwenden, um eine Liste der Wi-Fi Direct-Geräte zu erstellen, die sich innerhalb der Funkreichweite befinden. Sie können diese Geräte Ihrem PC zuordnen, indem Sie in den Benutzereinstellungen im Abschnitt "Geräte" die Option "Gerät hinzufügen" auswählen. Ihre App kann dann eine Netzwerksocketverbindung mit jedem in der Nähe befindlichen Wi-Fi Direct-Gerät herstellen. Wi-Fi Direct ist ein neues Feature, mit dem WiFi-Geräte einfach ohne einen Funkzugriffspunkt eine Verbindung miteinander herstellen können. Sie eignet sich hervorragend für die Multimediafreigabe oder Netzwerkspiele mit hoher Leistung. Weitere Informationen finden Sie im Abschnitt zum Windows.Devices.WifiDirect-Namespace in der Windows-Runtime-API.

Hinweis  Sie müssen die Näherungsfunktion in der Manifestdatei Ihrer App aktivieren, um die Wi-Fi Direct-API nutzen zu können.