Procédure pas à pas : connexion à l'aide de tâches et de requêtes HTTP XML
Cet exemple montre comment utiliser les interfaces IXMLHTTPRequest2 et IXMLHTTPRequest2Callback avec des tâches pour envoyer des requêtes HTTP GET et POST à un service Web dans une application Windows Store. En combinant IXMLHTTPRequest2 avec des tâches, écrivez du code qui composent avec d'autres tâches. Par exemple, vous pouvez utiliser la tâche de téléchargement dans le cadre d'une chaîne des tâches. La tâche de téléchargement peut également répondre quand le travail est annulé.
Conseil
Utilisez également le Kit de développement logiciel REST C++ pour exécuter des requêtes HTTP depuis une application Windows Store à l'aide d'une l'application C++ ou depuis une application de bureau C++.Pour plus d'informations, consultez C++ REST SDK (Codename "Casablanca").
Pour plus d'informations sur les tâches, consultez Parallélisme des tâches (runtime d'accès concurrentiel). Pour plus d’informations sur l’utilisation d'une tâche dans une application Windows Store, voir Asynchronous programming in C++ et Création d'opérations asynchrones en C++ pour les applications Windows Store.
Ce document explique d'abord comment créer un HttpRequest et ses classes de prise en charge. Il montre ensuite comment utiliser cette classe depuis une application Windows Store qui utilise C++ et XAML.
Pour obtenir un exemple complet qui utilise la classe HttpReader décrite dans ce document, consultez Développement de l'optimiseur de voyage Bing Maps, une application Windows Store dans JavaScript et C++. Pour un autre exemple qui utilise IXMLHTTPRequest2 mais n'utilise pas les tâches, consultez Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2).
Conseil
IXMLHTTPRequest2 et IXMLHTTPRequest2Callback sont les interfaces que nous recommandons d'utiliser dans une application Windows Store.Vous pouvez également adapter cet exemple pour l'utilisation dans une application de bureau.
Définition des classes HttpRequest, HttpRequestBuffersCallback et HttpRequestStringCallback
Lorsque vous utilisez l'interface IXMLHTTPRequest2 pour créer des requêtes Web via HTTP, vous implémentez l'interface IXMLHTTPRequest2Callback pour recevoir la réponse du serveur et de réagir à d'autres événements. Cet exemple définit la classe HttpRequest pour créer des applications Web, et les classes HttpRequestBuffersCallback et HttpRequestStringCallback afin de traiter des réponses. Les classes HttpRequestBuffersCallback et HttpRequestStringCallback prennent en charge la classe HttpRequest; vous travaillez uniquement avec la classe HttpRequest du code d'application.
Les méthodes GetAsync, PostAsync de la classe HttpRequest vous permettent de démarrer respectivement les opérations HTTP GET et POST. Ces méthodes utilisent la classe HttpRequestStringCallback pour lire la réponse du serveur comme une chaîne. Les méthodes SendAsync et ReadAsync vous permettent de transmettre un grand contenu en gros fragments. Ces méthodes retournent chacune concurrency::task pour représenter l'opération. Les méthodes GetAsync et task<std::wstring> produisent la valeur de PostAsync, où la partie wstring représente la réponse du serveur. Les méthodes SendAsync et task<void> produisent des valeurs ReadAsync; ces tâches se terminent lorsque les opérations d'envoi et de lecture se terminent.
Les interfaces IXMLHTTPRequest2 agissant de façon asynchrone, cet exemple utilise concurrency::task_completion_event afin de créer une tâche qui se termine après l'objet de rappel termine ou annule l'opération de téléchargement. La classe HttpRequest crée une continuation basée sur des tâches depuis cette tâche afin de définir le résultat final. La classe HttpRequest utilise une continuation basée sur des tâches pour garantir que la tâche de continuation s"exécute même si la tâche précédente produit une erreur ou est annulée. Pour plus d'informations sur les continuation basée sur des tâches, consultez Parallélisme des tâches (runtime d'accès concurrentiel).
Pour prendre en charge l'annulation, les classes HttpRequest, HttpRequestBuffersCallback, et HttpRequestStringCallback utilisent des jetons d'annulation. Les classes HttpRequestBuffersCallback et HttpRequestStringCallback utilisent la méthode concurrency::cancellation_token::register_callback pour permettre à l'événement d'achèvement de tâche de répondre à l'annulation. Ce rappel d'annulation abandonne le téléchargement. Pour plus d'informations sur l'annulation, consultez Annulation dans la bibliothèque de modèles parallèles.
Pour définir la classe HttpRequest
Utilisez le modèle Application vide (XAML) de Visual C++ pour créer un projet d'application XAML vierge. Cet exemple nomme le projet UsingIXMLHTTPRequest2.
Ajoutez un fichier d'en-tête au projet qui sera nommé HttpRequest.h et un fichier source nommé HttpRequest.cpp.
Dans pch.h, ajoutez ce code :
Dans HttpRequest.h, ajoutez ce code :
Dans HttpRequest.cpp, ajoutez ce code :
Utilisation de la classe HttpRequest dans une application Windows Store
Cette section montre comment utiliser la classe HttpRequest dans une application Windows Store. L'application fournit une zone d'entrée qui définit une ressource URL, et des commandes de bouton qui effectuent des opérations GET et POST, et un bouton de commande qui annule l'opération en cours.
Pour utiliser la classe HttpRequest
Dans MainPage.xaml, définissez l'élément StackPanel comme suit.
Dans MainPage.xaml.h, ajoutez la directive #include:
Dans MainPage.xaml.h, ajoutez ces variables membres private à la classe MainPage:
Dans MainPage.xaml.h, déclarez la méthode private ProcessHttpRequest:
Dans MainPage.xaml.cpp, ajoutez ces relevés using:
Dans MainPage.xaml.cpp, implémentez les méthodes GetButton_Click, PostButton_Click, et CancelButton_Click de la classe MainPage.
Conseil
Si votre application ne requiert pas de prise en charge de l'annulation, passez concurrency::cancellation_token::none aux méthodes HttpRequest::GetAsync et HttpRequest::PostAsync.
Dans MainPage.xaml.cpp, implémentez la méthode MainPage::ProcessHttpRequest.
Dans les propriétés du projet, sous Éditeur de liens, Entrée, spécifiez shcore.lib et msxml6.lib.
Voici l'application en cours de exécution :
Étapes suivantes
Procédures pas à pas relatives au runtime d'accès concurrentiel
Voir aussi
Référence
task (Concurrency Runtime), classe
Concepts
Parallélisme des tâches (runtime d'accès concurrentiel)
Annulation dans la bibliothèque de modèles parallèles
Création d'opérations asynchrones en C++ pour les applications Windows Store
Autres ressources
Asynchronous programming in C++
Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2)