演练:使用任务和 XML HTTP 请求进行连接

演示如何将 IXMLHTTPRequest2IXMLHTTPRequest2Callback 接口与任务结合使用,以将 HTTP GET 和 POST 请求发送至 Windows 应用商店应用中的 Web 服务。 整合 IXMLHTTPRequest2 的任务, 您能够组合其他任务来写代码。 例如,作为任务的一部分,链可以使用下载任务。 工作的时间时,下载任务还可以响应。

提示

还可以使用 C++ 其他 SDK 从 Windows 应用商店 app 使用 C++ app 或从桌面 C++ 应用程序执行 HTTP 请求。有关更多信息,请参见 C++ REST SDK (Codename "Casablanca")

有关任务的更多信息,请参见 任务并行(并发运行时)。 有关如何在 Windows 应用商店 中使用媒体文件的详细信息,请参阅Asynchronous programming in C++用 C++ 为 Windows 应用商店应用程序创建异步操作

文档第一个演示如何创建 HttpRequest 及其支持的选件类。 然后演示如何使用 C++ 和 XAML 从 Windows 应用商店 app 使用此类。

对于使用的更完整示例 HttpReader 选件类中描述的文档,请参见 在 JavaScript 和 C++ 中开发 Windows 应用商店应用程序 Bing 地图行程优化器。 有关使用其中IXMLHTTPRequest2许多特性的示例但没有使用任务,请参见 Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2)

提示

IXMLHTTPRequest2IXMLHTTPRequest2Callback 是建议用于 Windows 应用商店 app 的接口。还可以满足此示例用于桌面应用程序。

定义 HttpRequest、HttpRequestBuffersCallback 和 HttpRequestStringCallback 类

当您使用 IXMLHTTPRequest2 接口创建在 HTTP 时的 web 请求,则实现 IXMLHTTPRequest2Callback 接口接收服务器答复和响应到其他活动。 此示例定义 HttpRequest 选件类创建 web 请求和 HttpRequestBuffersCallbackHttpRequestStringCallback 选件类处理响应。 HttpRequestBuffersCallbackHttpRequestStringCallback 选件类支持 HttpRequest 选件类;您只能使用从应用程序代码的 HttpRequest 选件类一起使用。

GetAsyncHttpRequest 选件类的 PostAsync 方法可以启动 HTTP GET 和 POST 操作,分别。 这些方法使用 HttpRequestStringCallback 选件类读取服务器响应以字符串。 SendAsyncReadAsync 方法允许您对区块的流用内容。 上述每种方法返回 concurrency::task 表示运算。 GetAsyncPostAsync 方法产生 task<std::wstring> 值,wstring 部件表示该服务器的响应。 SendAsyncReadAsync 方法产生 task<void> 值;这些任务完成,当完成发送和读取操作。

因为IXMLHTTPRequest2接口异步操作,该示例使用concurrency::task_completion_event创建完成回调对象完成或取消下载操作后的任务。 HttpRequest 选件类创建从此任务的基于任务的延续设置最终结果。 HttpRequest 选件类使用基于任务的延续确保延续任务运行,即使前面的任务会导致错误或取消。 有关延续的更多信息,请参见 任务并行(并发运行时)

若要支持取消,HttpRequestHttpRequestBuffersCallbackHttpRequestStringCallback 选件类使用取消标记。 HttpRequestBuffersCallbackHttpRequestStringCallback 选件类使用 concurrency::cancellation_token::register_callback 方法使任务完成事件时响应取消。 此移除回调中止下载。 有关取消操作的更多信息,请参见 PPL 中的取消操作

定义 HttpRequest 类

  1. 使用 Visual C++ “空白应用程序 (XAML)” 模板创建空白 XAML 应用程序项目。 此示例将项目命名为UsingIXMLHTTPRequest2。

  2. 向项目添加名为 HttpRequest.h 和源文件名为 HttpRequest.cpp 的一个标头文件。

  3. 在 pch.h,添加以下代码:

  4. 在 HttpRequest.h,添加以下代码:

  5. 在 HttpRequest.h,添加以下代码:

在 Windows 应用商店 应用程序中使用 HttpRequest 类

本节中 Windows 应用商店 app 演示如何使用 HttpRequest 选件类。 该应用程序提供定义了一个 URL 资源的框中,输入,并执行获取和发布操作的命令按钮并取消当前操作的按钮命令。

使用 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_ClickPostButton_Click,并且,MainPageCancelButton_Click 方法类别。

    提示

    如果您的应用程序不需要取消支持,通过 concurrency::cancellation_token::noneHttpRequest::GetAsyncHttpRequest::PostAsync 方法。

  7. 在 MainPage.xaml.cpp,请执行 MainPage::ProcessHttpRequest 方法。

  8. 在项目属性,在 “链接器”下,“输入”,指定 shcore.libmsxml6.lib

这是运行的应用程序:

运行的 Windows 应用商店应用

后续步骤

并发运行时演练

请参见

参考

task 类(并发运行时)

task_completion_event 类

概念

任务并行(并发运行时)

PPL 中的取消操作

用 C++ 为 Windows 应用商店应用程序创建异步操作

其他资源

Asynchronous programming in C++

Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2)

IXMLHTTPRequest2

IXMLHTTPRequest2Callback