Condividi tramite


Procedura dettagliata: connessione tramite attività e richieste HTTP XML

Questo esempio illustra come utilizzare le interfacce IXMLHTTPRequest2 e IXMLHTTPRequest2Callback insieme alle attività per inviare richieste, HTTP GET e POST ad un servizio web, in un'applicazione Windows Store. Combinando IXMLHTTPRequest2 insieme alle attività, è possibile scrivere codice che compone altre attività. Ad esempio, è possibile utilizzare l'attività di download come parte di una catena di attività. L'attività di download può anche rispondere quando il lavoro viene annullato.

Suggerimento

È inoltre possibile utilizzare l'SDK C++ REST per eseguire richieste HTTP da un'applicazione Windows Store utilizzando l'applicazione C++ o da un'applicazione C++ desktop.Per ulteriori informazioni, vedi C++ REST SDK (nome in codice "Casablanca").

Per ulteriori informazioni sulle attività, vedere Parallelismo delle attività (runtime di concorrenza). Per ulteriori informazioni su come utilizzare le attività in un'applicazione Windows Store, vedere Asynchronous programming in C++ e Creazione di operazioni asincrone in C++ per le applicazioni Windows Store.

Questo primo documento mostra come creare HttpRequest e le relative classi di supporto. Viene quindi illustrato come utilizzare questa classe in un'applicazione Windows Store che utilizza C++ e XAML.

Per un esempio più completo, che utilizza la classe HttpReader specificata in questo documento, vedere Sviluppo dell'utilità di ottimizzazione dei viaggi di Bing Mappe, un'applicazione Windows Store in JavaScript e C++. Per un altro esempio che usa IXMLHTTPRequest2 ma non usa attività, vedere Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2).

Suggerimento

IXMLHTTPRequest2 e IXMLHTTPRequest2Callback sono interfacce che si consiglia di utilizzare in un'applicazione Windows Store.È inoltre possibile adattare questo esempio per utilizzarlo in un'applicazione desktop.

Definizione delle classi HttpRequest, HttpRequestBuffersCallback e HttpRequestStringCallback

Quando si utilizza l'interfaccia IXMLHTTPRequest2 per creare richieste Web tramite HTTP, si implementa l'interfaccia IXMLHTTPRequest2Callback per ricevere la risposta del server e rispondere agli eventi. In questo esempio viene definita la classe HttpRequest per creare richieste Web e le classi HttpRequestStringCallback, HttpRequestBuffersCallback per elaborare le risposte. Le classi di HttpRequestStringCallback e HttpRequestBuffersCallback supportano la classe HttpRequest; si utilizza solo la classe HttpRequest dal codice dell'applicazione.

I metodi GetAsync, PostAsync, della classe HttpRequest consentono di avviare rispettivamente le operazioni HTTP GET e POST. Questi metodi utilizzano la classe HttpRequestStringCallback per leggere la risposta del server come una stringa. I metodi ReadAsync e SendAsync consentono di trasmettere contenuti di grande dimensioni in blocchi. Ognuno di questi metodi restituisce concurrency::task per rappresentare l'operazione. I metodi task<std::wstring> e PostAsync producono il valore GetAsync, dove il frammento wstring rappresenta la risposta del server. I metodi ReadAsync e SendAsync producono valori task<void> ; queste attività vengono completate quando le operazioni d'invio e di lettura sono completate.

Poiché le interfacce IXMLHTTPRequest2 agiscono in maniera asincrona, questo esempio usa concurrency::task_completion_event per creare attività che può completarsi successivamente al completamento dell'oggetto di callback, oppure quando l'operazione di download viene annullata. La classe HttpRequest crea una continuazione correlata ad una attività, da questa attività, per impostare il risultato finale. La classe HttpRequest utilizza la continuazione di un'attività correlata, per garantire l'attività di continuazione anche se l'attività precedente produce un errore o viene annullata. Per ulteriori informazioni sulla continuazione di attività correlate, vedere Parallelismo delle attività (runtime di concorrenza).

Per supportare l'annullamento, HttpRequest, HttpRequestBuffersCallback e le classi di HttpRequestStringCallback utilizzano i token di annullamento. Le classi HttpRequestStringCallback e HttpRequestBuffersCallback utilizzano il metodo di concurrency::cancellation_token::register_callback per consentire all'attività di completare l'evento per rispondere all'annullamento. Questo callback di annullamento interrompe il download. Per ulteriori informazioni sull'annullamento, vedere Annullamento nella libreria PPL.

Per definire la classe HttpRequest

  1. Utilizzare il modello di Visual C++ Applicazione vuota (XAML), per creare un progetto di un'applicazione XAML vuota. In questo esempio nomina il progetto UsingIXMLHTTPRequest2.

  2. Aggiungere al progetto un file di intestazione denominato HttpRequest.h e un file di origine denominato HttpRequest.cpp.

  3. In pch.h, aggiungere questo codice :

  4. In HttpRequest.h, aggiungere il codice seguente:

  5. In HttpRequest.h, aggiungere questo codice:

Utilizzo della classe HttpRequest in un'applicazione Windows Store

In questa sezione viene illustrato come utilizzare la classe HttpRequest in un'applicazione Windows Store. L'applicazione fornisce una casella di input che definisce una risorsa con un URL, un pulsante che esegue le operazioni di GET e POST e un pulsante per annullare l'operazione in corso.

Per utilizzare la classe HttpRequest

  1. Nel file MainPage.xaml, definire l'elemento StackPanel come segue.

  2. In MainPage.xaml.h, aggiungere questa direttiva #include :

  3. In MainPage.xaml.h, aggiungere queste variabili membro private alla classe MainPage :

  4. In MainPage.xaml.h, dichiarare il metodo ProcessHttpRequest, private :

  5. In MainPage.xaml.cpp, aggiungere le istruzioni using :

  6. In MainPage.xaml.cpp, implementare GetButton_Click, PostButton_Clicke i metodi CancelButton_Click della classe MainPage .

    Suggerimento

    Se l'applicazione non richiede il supporto per l'annullamento, passare concurrency::cancellation_token::none ai metodi HttpRequest::PostAsync e HttpRequest::GetAsync.

  7. In MainPage.xaml.cpp, implementare il metodo MainPage::ProcessHttpRequest.

  8. Nelle proprietà del progetto, in Linker, Input, specificare shcore.lib e msxml6.lib.

Ecco l'applicazione in esecuzione:

App di Windows Store in esecuzione

Passaggi successivi

Procedure dettagliate del runtime di concorrenza

Vedere anche

Riferimenti

Classe task (runtime di concorrenza)

Classe task_completion_event

Concetti

Parallelismo delle attività (runtime di concorrenza)

Annullamento nella libreria PPL

Creazione di operazioni asincrone in C++ per le applicazioni Windows Store

Altre risorse

Asynchronous programming in C++

Quickstart: Connecting using XML HTTP Request (IXMLHTTPRequest2)

IXMLHTTPRequest2

IXMLHTTPRequest2Callback