演示如何将 IXMLHTTPRequest2 和 IXMLHTTPRequest2Callback 接口与任务结合使用,以将 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)。
提示
IXMLHTTPRequest2 和 IXMLHTTPRequest2Callback 是建议用于 Windows 应用商店 app 的接口。还可以满足此示例用于桌面应用程序。
定义 HttpRequest、HttpRequestBuffersCallback 和 HttpRequestStringCallback 类
当您使用 IXMLHTTPRequest2 接口创建在 HTTP 时的 web 请求,则实现 IXMLHTTPRequest2Callback 接口接收服务器答复和响应到其他活动。 此示例定义 HttpRequest 选件类创建 web 请求和 HttpRequestBuffersCallback 和 HttpRequestStringCallback 选件类处理响应。 HttpRequestBuffersCallback 和 HttpRequestStringCallback 选件类支持 HttpRequest 选件类;您只能使用从应用程序代码的 HttpRequest 选件类一起使用。
GetAsync,HttpRequest 选件类的 PostAsync 方法可以启动 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 方法使任务完成事件时响应取消。 此移除回调中止下载。 有关取消操作的更多信息,请参见 PPL 中的取消操作。
定义 HttpRequest 类
使用 Visual C++ “空白应用程序 (XAML)” 模板创建空白 XAML 应用程序项目。 此示例将项目命名为UsingIXMLHTTPRequest2。
向项目添加名为 HttpRequest.h 和源文件名为 HttpRequest.cpp 的一个标头文件。
在 pch.h,添加以下代码:
在 HttpRequest.h,添加以下代码:
在 HttpRequest.h,添加以下代码:
在 Windows 应用商店 应用程序中使用 HttpRequest 类
本节中 Windows 应用商店 app 演示如何使用 HttpRequest 选件类。 该应用程序提供定义了一个 URL 资源的框中,输入,并执行获取和发布操作的命令按钮并取消当前操作的按钮命令。
使用 HttpRequest 类
在 MainPage.xaml,如下所示请定义元素 StackPanel。
在 MainPage.xaml.h,请将此 #include 指令:
在 MainPage.xaml.h,请将这些 private 成员变量。MainPage 选件类:
在 MainPage.xaml.h,声明 private 方法 ProcessHttpRequest:
在 MainPage.xaml.cpp,请将这些 using 语句:
在 MainPage.xaml.cpp,请实现 GetButton_Click,PostButton_Click,并且,MainPage 的 CancelButton_Click 方法类别。
提示
如果您的应用程序不需要取消支持,通过 concurrency::cancellation_token::none 到 HttpRequest::GetAsync 和 HttpRequest::PostAsync 方法。
在 MainPage.xaml.cpp,请执行 MainPage::ProcessHttpRequest 方法。
在项目属性,在 “链接器”下,“输入”,指定 shcore.lib 和 msxml6.lib。
这是运行的应用程序:
后续步骤
请参见
参考
概念
用 C++ 为 Windows 应用商店应用程序创建异步操作
其他资源
Asynchronous programming in C++
Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2)