Compartir a través de


Tutorial: Conectar usando tareas y solicitudes HTTP XML

En este ejemplo se muestra cómo utilizar las interfaces IXMLHTTPRequest2 e IXMLHTTPRequest2Callback junto con otras tareas para enviar solicitudes HTTP GET y POST a un servicio web en una aplicación de la Tienda Windows. Mediante la combinación de IXMLHTTPRequest2 junto con las tareas, puede escribir código que se crea con otras tareas. Por ejemplo, puede usar la tarea de descarga como parte de una cadena de tareas. La tarea de descarga también puede responder cuando se cancela el trabajo.

Sugerencia

Además, puede utilizar SDK de REST de C++ para realizar solicitudes HTTP desde una aplicación Tienda Windows mediante una aplicación C++ o desde una aplicación de escritorio C++.Para obtener más información, vea SDK de REST de C++ (nombre código "Casablanca").

Para obtener más información acerca de las tareas, vea Paralelismo de tareas (Runtime de simultaneidad). Para obtener más información sobre cómo usar tareas en una aplicación Tienda Windows, vea Asynchronous programming in C++ y Crear operaciones asincrónicas en C++ para aplicaciones de la Tienda Windows.

En este documento se muestra primero cómo crear HttpRequest y sus clases auxiliares. A continuación se muestra cómo utilizar esta clase desde una aplicación Tienda Windows que usa C++ y XAML.

Para obtener un ejemplo más completo que utiliza la clase HttpReader descrita en este documento, vea Desarrollar el optimizador de recorridos de Mapas de Bing, una aplicación de la Tienda Windows en JavaScript y C++. Para obtener otro ejemplo que utiliza IXMLHTTPRequest2 pero no usa tareas, vea Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2).

Sugerencia

IXMLHTTPRequest2 y IXMLHTTPRequest2Callback son las interfaces que se recomiendan para usarlas en una aplicación Tienda Windows.También puede adaptar este ejemplo para usarlo en una aplicación de escritorio.

Definir las clases HttpRequest, HttpRequestBuffersCallback y HttpRequestStringCallback

Cuando se utiliza la interfaz IXMLHTTPRequest2 para crear solicitudes web sobre HTTP, se implementa la interfaz IXMLHTTPRequest2Callback para recibir la respuesta del servidor y reaccionar a otros eventos. En este ejemplo se define la clase HttpRequest para crear solicitudes web y las clases HttpRequestBuffersCallback y HttpRequestStringCallback para procesar las respuestas. Las clases HttpRequestBuffersCallback y HttpRequestStringCallback admiten la clase HttpRequest; trabaja solamente con la clase HttpRequest del código de la aplicación.

Los métodos GetAsync, PostAsync de la clase HttpRequest permiten iniciar las operaciones HTTP GET y POST, respectivamente. Estos métodos utilizan la clase HttpRequestStringCallback para leer la respuesta del servidor como una cadena. Los métodos SendAsync y ReadAsync permiten hacer streaming del contenido grande en fragmentos. Cada uno de estos métodos devuelve concurrency::task para representar la operación. Los métodos GetAsync y PostAsync generan el valor task<std::wstring>, donde la parte wstring representa la respuesta del servidor. Los métodos SendAsync y de ReadAsync generan los valores task<void>; estas tareas se completan cuando las operaciones de envío y lectura se completan.

Dado que las interfaces de IXMLHTTPRequest2 actúan de forma asincrónica, en este ejemplo se utiliza concurrency::task_completion_event para crear una tarea que finaliza después de que el objeto de devolución de llamada completa o cancela la operación de descarga. La clase HttpRequest crea una continuación basada en tareas a partir de esta tarea para establecer el resultado final. La clase HttpRequest utiliza una continuación basada en tareas para garantizar que la tarea de continuación se ejecuta aunque la tarea anterior produzca un error o se cancele. Para obtener más información sobre continuaciones basadas en tareas, vea Paralelismo de tareas (Runtime de simultaneidad).

Para admitir la cancelación, las clases HttpRequest, HttpRequestBuffersCallback y HttpRequestStringCallback utilizan tokens de cancelación. Las clases HttpRequestBuffersCallback y HttpRequestStringCallback utilizan el método concurrency::cancellation_token::register_callback para habilitar el evento de finalización de la tarea y responder a la cancelación. Esta devolución de llamada de cancelación anula la descarga. Para obtener más información sobre la cancelación, vea Cancelación en la biblioteca PPL.

Para definir la clase HttpRequest

  1. Utilice la plantilla de Visual C++ Aplicación vacía (XAML) para crear un proyecto de aplicación de archivo XAML en blanco. En este ejemplo se asigna el nombre al proyecto UsingIXMLHTTPRequest2.

  2. Agregue al proyecto un archivo de encabezado que se denomina HttpRequest.h y un archivo de código fuente denominado HttpRequest.cpp.

  3. En pch.h, agregue este código:

  4. En HttpRequest.h, agregue este código:

  5. En HttpRequest.cpp, agregue este código:

Usar la clase HttpRequest en una aplicación de Tienda Windows

En esta sección se muestra cómo utilizar la clase HttpRequest en una aplicación Tienda Windows. La aplicación proporciona un cuadro de entrada que define un recurso de dirección URL y los comandos de botón que realizan las operaciones GET y POST, así como un comando de botón que cancela la operación actual.

Para usar la clase HttpRequest

  1. En MainPage.xaml, defina el elemento StackPanel como sigue.

  2. En MainPage.xaml.h, agregue esta directiva #include:

  3. En MainPage.xaml.h, agregue a estas variables de miembro private a la clase MainPage:

  4. En MainPage.xaml.h, declare el método ProcessHttpRequest private:

  5. En MainPage.xaml.cpp, agregue estas instrucciones using:

  6. En MainPage.xaml.cpp, implemente los métodos GetButton_Click, PostButton_Click y CancelButton_Click de la clase MainPage.

    Sugerencia

    Si la aplicación no requiere la admisión de la cancelación, pase concurrency::cancellation_token::none a los métodos HttpRequest::GetAsync y HttpRequest::PostAsync.

  7. En MainPage.xaml.cpp, implemente el método MainPage::ProcessHttpRequest.

  8. En las propiedades del proyecto, en Vinculador, Entrada, especifique shcore.lib y msxml6.lib.

Esta es la aplicación en ejecución:

Aplicación de la Tienda Windows en ejecución

Pasos siguientes

Tutoriales del Runtime de simultaneidad

Vea también

Referencia

task (Clase) (Motor en tiempo de ejecución de simultaneidad)

task_completion_event (Clase)

Conceptos

Paralelismo de tareas (Runtime de simultaneidad)

Cancelación en la biblioteca PPL

Crear operaciones asincrónicas en C++ para aplicaciones de la Tienda Windows

Otros recursos

Asynchronous programming in C++

Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2)

IXMLHTTPRequest2

IXMLHTTPRequest2Callback