Freigeben über


Exemplarische Vorgehensweise: Verbinden von Verwendungsaufgaben und XML-HTTP-Anforderungen

Dieses Beispiel zeigt, wie die IXMLHTTPRequest2- und IXMLHTTPRequest2Callback-Schnittstellen zusammen mit Aufgaben für HTTP-GET- und POST-Anforderungen an einen Webdienst in einer Windows Store-App verwendet werden. Beim Kombinieren von IXMLHTTPRequest2 mit Aufgaben können Sie Code schreiben, der mit anderen Aufgaben zusammen erstellt wird. Beispielsweise können Sie die Downloadaufgabe als Teil einer Kette von Aufgaben verwenden. Wenn Arbeit abgebrochen wird, kann die Downloadaufgabe auch weiterhin antworten.

Tipp

Darüber hinaus können Sie das C++-REST-SDK verwenden, um HTTP-Anforderungen aus einer Windows Store-App mit einer C++-Desktopanwendung auszuführen.Weitere Informationen hierzu finden Sie unter C++-REST-SDK (Codename "Casablanca").

Weitere Informationen zu Aufgaben finden Sie unter Aufgabenparallelität (Concurrency Runtime). Weitere Informationen zur Verwendung von Aufgaben in einer Windows Store-App finden Sie unter Asynchronous programming in C++ und Erstellen von asynchronen Vorgängen in C++ für Windows Store-Apps.

Dieses Dokument erläutert zunächst, wie die HttpRequest-Klasse und unterstützende Klassen erstellt werden. Anschließend wird dargestellt, wie diese Klasse in einer Windows Store-App verwendet werden kann, die C++ und XAML verwendet.

Ein vollständigeres Beispiel für die Verwendung der in diesem Dokument beschriebenen HttpReader-Klasse finden Sie unter Entwickeln des Reise-Optimierers von Bing Maps, einer Windows Store-App in JavaScript und C++. Ein weiteres Beispiel zum Verwenden von IXMLHTTPRequest2, jedoch ohne Aufgaben, finden Sie unter Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2).

Tipp

IXMLHTTPRequest2 und IXMLHTTPRequest2Callback sind die Schnittstellen, die wir für eine Windows Store-App empfehlen.Darüber hinaus können Sie dieses Beispiel auch für die Verwendung in einer Desktop-App anpassen.

Definieren der HttpRequest-, HttpRequestBuffersCallback- und HttpRequestStringCallback-Klassen

Wenn Sie die IXMLHTTPRequest2-Schnittstelle verwenden, um Webanforderungen über HTTP zu erstellen, implementieren Sie die IXMLHTTPRequest2Callback-Schnittstelle, um die Serverantwort zu empfangen und auf andere Ereignisse zu reagieren. In diesem Beispiel werden die HttpRequest-Klasse zum Erstellen von Webanforderungen und die Klassen HttpRequestBuffersCallback und HttpRequestStringCallback zum Verarbeiten der Antworten definiert. Die HttpRequestBuffersCallback-Klasse und die HttpRequestStringCallback-Klasse unterstützen die HttpRequest-Klasse; Sie arbeiten im Anwendungscode nur mit der HttpRequest-Klasse.

Die GetAsync-Methode und die PostAsync-Methode der HttpRequest-Klasse ermöglichen Ihnen das Durchführen von HTTP-Anforderungen (GET, POST). Diese Methoden verwenden die HttpRequestStringCallback-Klasse, um die Serverantwort als Zeichenfolge zu lesen. Die SendAsync-Methode und die ReadAsync-Methode ermöglichen das Übertragen von umfangreichen Inhalten in Blöcken. Diese Methoden geben jeweils concurrency::task zurück, um den Vorgang darzustellen. Die GetAsync-Methode und die PostAsync-Methode generieren task<std::wstring>-Wert, wobei der wstring-Teil die Antwort des Servers darstellt. Die SendAsync-Methode und die ReadAsync-Methode generieren task<void>-Werte. Diese Aufgaben werden abgeschlossen, wenn die "Send"- und "Read"-Vorgänge abgeschlossen werden.

Da die IXMLHTTPRequest2-Schnittstellen sich asynchron verhalten, wird in diesem Beispiel concurrency::task_completion_event verwendet, um eine Aufgabe zu erstellen, die abgeschlossen wird, nachdem das Rückrufobjekt den Downloadvorgang abgeschlossen oder abgebrochen hat. Die HttpRequest-Klasse erstellt eine aufgabenbasierte Fortsetzung aus dieser Aufgabe, um das Endergebnis festzulegen. Die HttpRequest-Klasse verwendet eine aufgabenbasierte Fortsetzung, um sicherzustellen, dass die Fortsetzungsaufgabe ausgeführt wird, auch wenn die vorherige Aufgabe einen Fehler erzeugt oder abgebrochen wird. Weitere Informationen zu aufgabenbasierten Fortsetzungen finden Sie unter Aufgabenparallelität (Concurrency Runtime).

Um ein Abbrechen zu unterstützen, verwenden die Klassen HttpRequest, HttpRequestBuffersCallback und HttpRequestStringCallback Abbruchtoken. Die HttpRequestBuffersCallback-Klasse und die HttpRequestStringCallback-Klasse verwenden die concurrency::cancellation_token::register_callback-Methode, um das Aufgabenabschlussereignis zu aktivieren und auf den Abbruch zu reagieren. Dieser Abbruchsrückruf bricht den Download ab. Weitere Informationen über Abbrüche finden Sie unter Abbruch in der PPL.

So definieren Sie die HttpRequest-Klasse

  1. Verwenden Sie die Visual C++-Vorlage Leere App (XAML), um ein leeres XAML-App-Projekt zu erstellen. In diesem Beispiel heißt das Projekt UsingIXMLHTTPRequest2.

  2. Fügen Sie dem Projekt eine Headerdatei mit dem Namen "HttpRequest.h" und eine Quelldatei mit dem Namen "HttpRequest.cpp" hinzu.

  3. Fügen Sie "pch.h" diesen Code hinzu:

  4. Fügen Sie "HttpRequest.h" diesen Code hinzu:

  5. Fügen Sie "HttpRequest.cpp" diesen Code hinzu:

Verwenden der HttpRequest-Klasse in einer Windows Store-App

In diesem Abschnitt wird veranschaulicht, wie die HttpRequest-Klasse in einer Windows Store-App verwendet wird. Die App enthält ein Eingabefeld, das eine URL-Ressource definiert, und Schaltflächen zum Durchführen von GET- und POST-Anforderungen und zum Abbrechen des aktuellen Vorgangs.

So verwenden Sie die HttpRequest-Klasse

  1. In "MainPage.xaml" definieren Sie das StackPanel-Element wie folgt.

  2. In "MainPage.xaml.h" fügen Sie diese #include-Direktive hinzu:

  3. Fügen Sie diese private-Membervariablen der MainPage-Klasse in "MainPage.xaml.h" hinzu:

  4. Deklarieren Sie in "MainPage.xaml.h" die private-Methode ProcessHttpRequest:

  5. Fügen Sie "MainPage.xaml.cpp" diese using-Anweisungen hinzu:

  6. Implementieren Sie in "MainPage.xaml.cpp" die Methoden GetButton_Click, PostButton_Click und CancelButton_Click aus der MainPage-Klasse.

    Tipp

    Wenn Ihre App keine Abbruchunterstützung benötigt, übergeben Sie concurrency::cancellation_token::none an die HttpRequest::GetAsync-Methode und die HttpRequest::PostAsync-Methode.

  7. Implementieren Sie die MainPage::ProcessHttpRequest-Methode in "MainPage.xaml.cpp".

  8. In den Projekteigenschaften unter Linker und Eingabe geben Sie shcore.lib und msxml6.lib an.

Hier ist die ausgeführte App:

Die Windows Store-App, die ausgeführt wird

Nächste Schritte

Exemplarische Vorgehensweisen für die Concurrency Runtime

Siehe auch

Referenz

task-Klasse (Concurrency Runtime)

task_completion_event-Klasse

Konzepte

Aufgabenparallelität (Concurrency Runtime)

Abbruch in der PPL

Erstellen von asynchronen Vorgängen in C++ für Windows Store-Apps

Weitere Ressourcen

Asynchronous programming in C++

Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2)

IXMLHTTPRequest2

IXMLHTTPRequest2Callback