Language: HTML | XAML

Herstellen einer Verbindung mit XML-HTTP-Anforderungen und "IXMLHTTPRequest2" (Windows-Runtime-Apps mit C++ und XAML)

Applies to Windows and Windows Phone

Verwenden Sie erweiterte XML-HTTP-Anforderungen und die IXMLHTTPRequest2-Schnittstelle, um in einer Windows-Runtime-App mit C++ HTTP-GET- und -POST-Anforderungen an einen Webdienst zu senden.Die in diesem Thema beschriebenen Features werden in XML-Beispiel für HTTP-Anforderung 2 – GET und XML-Beispiel für HTTP-Anforderung 2 – POST veranschaulicht.

Hinweis  Informationen zum Senden von HTTP-Anforderungen in einer mit C#, Visual Basic oder C++ entwickelten Windows-Runtime-App finden Sie unter Herstellen einer Verbindung mit einem HTTP-Server mit "Windows.Web.Http.HttpClient".

IXMLHTTPRequest2 ermöglicht die Ausführung von Apps in einem Multithread-Apartment (MTA). Dies ist eine Voraussetzung für die Ausführung unter der Windows-Runtime in Windows 8. Die Ausführung in einem MTA bedeutet, dass ein Thread mit Zugriff auf ein IXMLHTTPRequest2-Objekt nicht die Anforderungs- oder Antwortverarbeitung für andere IXMLHTTPRequest2-Objekte in demselben Apartment blockiert.

Diese Schnittstelle implementiert darüber hinaus ein Rückrufmodell für das Ereignishandling. Da IXMLHTTPRequest2-Methoden nur asynchrone Methodenaufrufe unterstützen, muss eine App zum Empfangen von Abschlussrückrufen einen Zeiger auf ein IXMLHTTPRequest2Callback-Objekt übergeben, wenn sie IXMLHTTPRequest2::Open für das Erstellen einer HTTP-Anforderung aufruft.

Grundlegende Informationen zu HTTP-Anforderungsmustern finden Sie in RFC 2616.

Voraussetzungen

In den folgenden Beispielen wird C++ verwendet. Die Beispiele basieren auf dem XML-Beispiel für HTTP-Anforderung 2 – GET und dem XML-Beispiel für HTTP-Anforderung 2 – POST. Allgemeine Informationen zum Erstellen einer Windows-Runtime-App mit C++ finden Sie unter Erstellen Ihrer ersten Windows-Runtime-App mit C++.

Damit die Windows-Runtime-App im Netzwerk verwendet werden kann, müssen Sie alle erforderlichen Netzwerkfunktionen in der Projektdatei Package.appxmanifest festlegen. Weitere Informationen finden Sie unter So wird's gemacht: Festlegen von Netzwerkfunktionen.

Festlegen der Funktionen zur Aktivierung des Netzwerkzugriffs

  • Richten Sie die Netzwerkfunktionen für Ihre App ein, um den Zugriff auf eine private Homepage oder ein Firmennetzwerk sowie auf das Internet zu ermöglichen. Für diese App müssen Sie Netzwerkfunktionen einrichten, da der Client eine Verbindung zu Webservices herstellt.

    Wenn die App als Client eine Verbindung mit Webdiensten im Internet herstellen können muss, ist die Funktion Internet (Client) erforderlich. Wenn die App als Client eine Verbindung mit Webdiensten in einem Heim- oder Firmennetzwerk herstellen können muss, ist die Funktion Private Netzwerke (Client und Server) erforderlich.

    Hinweis  Unter Windows Phone gibt es nur eine Netzwerkfunktion – Internet (Client und Server) –, die den Netzwerkzugriff komplett für die App aktiviert.

    Falls eine App auf den Webdienst zugreifen möchte, der auf demselben Computer wie die App ausgeführt wird, ist dafür Loopbackzugriff erforderlich. Der Loopbackzugriff ist für eine App aus Sicherheitsgründen normalerweise nicht zulässig. In Microsoft Visual Studio 2013 entwickelte und ausgeführte Apps werden jedoch automatisch so registriert, dass sie bei der Ausführung im Debugger von den Loopbackbeschränkungen ausgenommen werden. Weitere Informationen finden Sie unter Aktivieren von Loopback und Debuggen der Netzwerkisolation.

    Weitere Informationen zum Netzwerkzugriff finden Sie unter Konfigurieren von Netzwerkisolationsfunktionen.

    Diese Schritte müssen durchgeführt werden, um vor der Bereitstellung Netzwerkfunktionen für eine App einzurichten, wenn sie auf einen Webdienst im Internet oder auf ein Heim- oder Arbeitsplatznetzwerk zugreift.

  1. Öffnen Sie die Datei package.appxmanifest in Visual Studio 2013.
  2. Wählen Sie die Registerkarte Capabilities (Funktionen) aus.
  3. Wählen Sie zum Erstellen der Windows-Version des Beispiels die Funktionen Internet (Client) und Private Netzwerke (Client und Server) aus.

    Wählen Sie zum Erstellen der Windows Phone-Version des Beispiels die Funktion Internet (Client und Server) aus.

  4. Speichern und schließen Sie die Manifestdatei.

Erstellen und Senden einer GET-Anforderung

  1. Erstellen Sie zuerst die für diese Operation nötigen Referenzen sowie den Rückruf, der den Abschluss der Anforderung anzeigt. Das XML-Beispiel für HTTP-Anforderung 2 – GET definiert seine eigenen Implementierungen von IXMLHTTPRequest2 und IXMLHTTPRequest2Callback, die für die Erstellung der erforderlichen Betriebsobjekte in den folgenden Beispielen verwendet werden.

    
    HRESULT hr = S_OK;
    DWORD dwStatus = 0;
    BOOL fAbort = TRUE;
    ComPtr<IXMLHTTPRequest2> spXHR;
    ComPtr<CXMLHttpRequest2Callback> spXhrCallback;
    
    
  2. Erstellen und initialisieren Sie Instanzen der IXMLHTTPRequest2- und IXMLHTTPRequest2Callback-Objekte.

    
    
    //
    // Create and initialize an IXMLHTTPRequest2 object
    //
    hr = CoCreateInstance(CLSID_FreeThreadedXMLHTTP60,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_PPV_ARGS(&spXHR));
    
    //
    //Create and initialize an IXMLHTTPRequest2Callback object
    //
    hr = MakeAndInitialize<CXMLHttpRequest2Callback>(&spXhrCallback);
    
    
    
  3. Konfigurieren Sie die GET-Anforderung, und senden Sie sie an den Server.

    
    
    hr = spXHR->Open(L"GET",              // Method.
                     pcwszUrl,            // Url.
                     spXhrCallback.Get(), // Callback.
                     NULL,                // Username.
                     NULL,                // Password.
                     NULL,                // Proxy username.
                     NULL);               // Proxy password.
    
    //
    //Send the GET request
    //
    hr = spXHR->Send(NULL, 0);
    
    
    
  4. Warten Sie, bis die Anforderung abgeschlossen ist.

    
    hr = spXhrCallback->WaitForComplete(&dwStatus);
    
    
    

    Hinweis  Anrufer, die Abschluss- oder Statusereignisse zu einem STA- oder UI-Thread erhalten müssen, müssen einen Mechanismus verwenden, der die Anzeige des Thread-Nachrichtenfensters nicht blockiert. Beispielsweise kann dazu eine Fensternachricht für den Window-Handle des STA- oder UI-Threads angezeigt werden.

Erstellen und Senden einer POST-Anforderung

  1. Wie im Beispiel zu "GET" werden zuerst die für diese Operation erforderlichen Referenzen sowie der Rückruf erzeugt, der den Abschluss der Anforderung anzeigt. Das XML-Beispiel für HTTP-Anforderung 2 – POST definiert ebenfalls seine eigenen Implementierungen von IXMLHTTPRequest2 und IXMLHTTPRequest2Callback, die für die Erstellung der erforderlichen Betriebsobjekte in den folgenden Beispielen verwendet werden. Für den POST-Vorgang muss jedoch der für den Vorgang verwendete Datenstrom mit XMLHttpRequest2PostStream erstellt werden, eine Implementierung, wenn für das Beispiel ISequentialStream definiert ist. Zu den Alternativen für die Verwendung von ISequentialStream für eine POST-Anforderung gehören SHCreateMemStream/SHCreateStreamOnFile für Desktop-Apps und CreateStreamOverRandomAccessStream für Windows-Runtime-Apps.

    Erstellen Sie zuerst die für diese Operation erforderlichen Referenzen sowie den Rückruf, der den Anforderungsfortschritt anzeigt. Es wurden ebenfalls Variablen erstellt und definiert, die die Größe der zu sendenden Datei wiedergeben und den Abschluss der Anforderung anzeigen.

    
    HRESULT hr = S_OK;
    DWORD dwStatus = 0;
    ULONGLONG ullFileSize = 0;
    BOOL fAbort = TRUE;
    ComPtr<IXMLHTTPRequest2> spXHR;
    ComPtr<CXMLHttpRequest2Callback> spXhrCallback;
    ComPtr<CXMLHttpRequestPostStream> spXhrPostStream;
    
    
  2. Erstellen und initialisieren Sie Objekte der IID_IXMLHTTPRequest2-Klasse, der CXMLHTTPRequest2Callback-Klasse und der XMLHTTPRequestPostStream-Klasse.

    
    //
    //Initialize IXMLHTTPRequest2Callback
    //
    hr = MakeAndInitialize<CXMLHttpRequest2Callback>(&spXhrCallback);
    if (FAILED(hr))
    {
        goto Exit;
    }
    
    //
    // Create an object of the CXMLHttpRequestPostStream class
    //
    spXhrPostStream = Make<CXMLHttpRequestPostStream>();
    if (spXhrPostStream == NULL)
    {
        hr = E_OUTOFMEMORY;
        goto Exit;
    }
    
    
  3. Öffnen Sie die Datei, und rufen Sie die Größe ab.

    
    //
    //Open the file
    //
    hr = spXhrPostStream->Open(pcwszFileName);
    
    //
    //Get file size
    //
    hr = spXhrPostStream->GetSize(&ullFileSize);
    
    
    
  4. Erstellen Sie die POST-Anforderung, und senden Sie sie an den Server.

    
    //
    //Configure the POST request
    //
    hr = spXHR->Open(L"POST",             // Method.
                     pcwszUrl,            // Url.
                     spXhrCallback.Get(), // Callback.
                     NULL,                // Username.
                     NULL,                // Password.
                     NULL,                // Proxy username.
                     NULL);               // Proxy password.
    if (FAILED(hr))
    {
        goto Exit;
    }
    
    //
    //Send the POST request
    //
    hr = spXHR->Send(spXhrPostStream.Get(), ullFileSize);
    if (FAILED(hr))
    {
        goto Exit;
    }
    
    
  5. Warten Sie, bis die Anforderung abgeschlossen ist.

    
    hr = spXhrCallback->WaitForComplete(&dwStatus);
    if (FAILED(hr))
    {
        goto Exit;
    }
    
    fAbort = FALSE;
    
    

    Hinweis  Anrufer, die Abschluss- oder Statusereignisse zu einem STA- oder UI-Thread erhalten müssen, müssen einen Mechanismus verwenden, der die Anzeige des Thread-Nachrichtenfensters nicht blockiert. Beispielsweise kann dazu eine Fensternachricht für den Window-Handle des STA- oder UI-Threads angezeigt werden.

Zusammenfassung

In diesem Thema haben Sie erfahren, wie Sie eine Verbindung mit einem Webdienst anhand von GET- und POST-Anforderungen mit erweiterten XML-HTTP-Anforderungen sowie den Schnittstellen IXMLHTTPRequest2 und IXMLHTTPRequest2Callbackinitiieren.

Verwandte Themen

Weitere Ressourcen
Herstellen von Verbindungen mit Webdiensten
Behandeln von Ausnahmen in Netzwerk-Apps
So wird's gemacht: Konfigurieren von Netzwerkfunktionen
Aktivieren von Loopback und Debuggen der Netzwerkisolation.
Referenz
Erweiterte XML-HTTP-Anforderung
IXMLHTTPRequest2
IXMLHTTPRequest2Callback
Erweiterte XML-HTTP-Anforderung (IXMLHTTPRequest2)
Beispiele
XML-Beispiel für HTTP-Anforderung 2 – GET
XML-Beispiel für HTTP-Anforderung 2 – POST

 

 

Anzeigen:
© 2014 Microsoft