Поделиться через


Пошаговое руководство. Подключение с использованием задач и HTTP-запросов XML

Этот пример показывает, как использовать интерфейсы IXMLHTTPRequest2 и IXMLHTTPRequest2Callback вместе с задачами отправки HTTP-запросов GET и POST к веб-службе в приложении Магазин Windows. Путем объединения IXMLHTTPRequest2 с задачами, можно написать код, который объединяется с другими задачами. Например, можно использовать задачу загрузки в составе этих задач. Задача загрузки может также реагировать на отмену работы.

Совет

Можно также использовать C++ REST SDK для выполнения HTTP-запросов из приложения Магазин Windows, используя приложение С++, или из настольного приложения С++.Дополнительные сведения см. в разделе C++ REST SDK (Codename "Casablanca").

Дополнительные сведения о задачах см. в разделе Параллелизм задач (среда выполнения с параллелизмом). Дополнительные сведения об использовании задач в приложении Магазин Windows см. в разделах Asynchronous programming in C++ и Создание асинхронных операций в C++ для приложений для Магазина Windows.

В этом документе сначала показано, как создать HttpRequest и его вспомогательные классы. Затем показано, как использовать этот класс из приложения Магазин Windows, использующего C++ и XAML.

Более полный пример, в котором используется класс HttpReader, описанный в этом документе, см. в разделе Разработка Bing Maps Trip Optimizer — приложения для Магазина Windows — с помощью JavaScript и C++. Другой пример, который использует IXMLHTTPRequest2, но не использует задач, см. в разделе Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2).

Совет

IXMLHTTPRequest2 и IXMLHTTPRequest2Callback - интерфейсы, которые рекомендуется использовать в приложении Магазин Windows.Можно также адаптировать этот пример для использования в настольном приложении.

Определение классов HttpRequest, HttpRequestBuffersCallback и HttpRequestStringCallback

В случае использования интерфейса IXMLHTTPRequest2 для создания веб-запросов по протоколу HTTP необходимо реализовать интерфейс IXMLHTTPRequest2Callback для получения ответа сервера и реагирования на другие события. В этом примере определяется класс HttpRequest для создания веб-запросов и классы HttpRequestBuffersCallback и HttpRequestStringCallback для обработки ответов. Классы HttpRequestBuffersCallback и HttpRequestStringCallback поддерживают класс HttpRequest; пользователь работает только с классом HttpRequest из кода приложения.

Методы GetAsync, PostAsync класса HttpRequest позволяет запустить операции HTTP GET и POST соответственно. Эти методы используют класс HttpRequestStringCallback для чтения ответ сервера в виде строки. Методы SendAsync и ReadAsync позволяют отправлять большое содержимое в блоках. Эти методы возвращают значение concurrency::task для представления операции. Методы GetAsync и PostAsync создают значение task<std::wstring>, где часть wstring представляет ответ сервера. Методы SendAsync и ReadAsync генерируют значения task<void>; эти задачи завершаются по завершению операций отправки и чтения.

Поскольку интерфейсы IXMLHTTPRequest2 работают асинхронно, в этом примере используется concurrency::task_completion_event для создания задачи, которая завершается после того, как объект обратного вызова завершает или отменяет операцию загрузки. Класс HttpRequest создает основанное на задачах продолжение из этой задачи, чтобы установить конечный результат. Класс HttpRequest использует основанное на задачах продолжение, чтобы убедиться, что задача продолжения выполняется, даже если предыдущая задача выдает ошибку или отменена. Дополнительные сведения об основанных на задачах продолжениях см. в разделе Параллелизм задач (среда выполнения с параллелизмом).

Чтобы поддерживать отмену, классы HttpRequest, HttpRequestBuffersCallback и HttpRequestStringCallback используют токены отмены. Классы HttpRequestBuffersCallback и HttpRequestStringCallback используют метод concurrency::cancellation_token::register_callback, чтобы позволить событию завершения задачи реагировать на отмену. Этот обратный вызов отмены прерывает загрузку. Дополнительные сведения об отмене см. в разделе Отмена в библиотеке параллельных шаблонов.

Определение класса HttpRequest

  1. Используйте шаблон Пустое приложение (XAML) Visual C++, чтобы создать пустой проект приложения XAML. В этом примере проект назван UsingIXMLHTTPRequest2.

  2. Добавьте в проект файл заголовка с именем HttpRequest.h и файл исходного кода с именем HttpRequest.cpp.

  3. В pch.h добавьте следующий код:

  4. В HttpRequest.h добавьте следующий код:

  5. В HttpRequest.cpp добавьте следующий код:

Использование класса HttpRequest в приложении Магазин Windows

В этом разделе показано, как использовать класс HttpRequest в приложении Магазин Windows. Приложение предоставляет окно ввода, определяющее ресурс url-адреса, и кнопки команд, которые выполняют операции GET и POST, и команду кнопки, которая отменяет текущую операцию.

Использование класса HttpRequest

  1. В MainPage.xaml, следует указать элемент StackPanel следующим образом.

  2. В MainPage.xaml.h добавьте эту директиву #include:

  3. В MainPage.xaml.h добавьте следующие переменные-члены private в класс MainPage:

  4. В MainPage.xaml.h объявите private метод ProcessHttpRequest:

  5. В MainPage.xaml.cpp добавьте эти операторы using:

  6. В MainPage.xaml.cpp реализуйте методы GetButton_Click, PostButton_Click и CancelButton_Click класса MainPage.

    Совет

    Если приложение не требует поддержки отмены, передайте concurrency::cancellation_token::none к методам HttpRequest::GetAsync и HttpRequest::PostAsync.

  7. В MainPage.xaml.cpp реализуйте метод MainPage::ProcessHttpRequest.

  8. В свойствах проекта выберите Компоновщик, Ввод, укажите shcore.lib и msxml6.lib.

Здесь работающее приложение:

Запущенное приложение для Магазина Windows

Следующие действия

Пошаговые руководства по среде выполнения с параллелизмом

См. также

Ссылки

Класс task (среда выполнения с параллелизмом)

Класс task_completion_event

Основные понятия

Параллелизм задач (среда выполнения с параллелизмом)

Отмена в библиотеке параллельных шаблонов

Создание асинхронных операций в C++ для приложений для Магазина Windows

Другие ресурсы

Asynchronous programming in C++

Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2)

IXMLHTTPRequest2

IXMLHTTPRequest2Callback