2017-01-03 2 views
0

Kürzlich habe ich begonnen, das AWS C++ SDK mit einigem Erfolg zu verwenden. Jene Aufrufe, die auf HTTPS GET basieren, funktionieren einwandfrei. Für die IoT REST API kann ich Things und ListThings erstellen.Der Aufruf von UpdateThing gibt 504 Gateway Timeout bei Verwendung von AWS C++ SDK zurück

Wenn ich jedoch die UpdateThing-Anforderung aufruft, hängt der Anruf und beim Timeout erhalte ich einen AWS 504-Gateway-Timeout-Fehler.

Ich habe eine Reihe von Dingen versucht, aber ohne Erfolg. Es scheint nur wenige veröffentlichte Beispiele zu geben, die mir helfen, das Problem zu entschlüsseln.

Die DEBUG Logausgabe AWS ist hier:

[DEBUG] 2017-01-03 22:08:42 AWSClient [0x7fff755d1000] Request Successfully signed 
[DEBUG] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] Attempting to acquire curl connection. 
[DEBUG] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] No current connections available in pool. Attempting to create new connections. 
[DEBUG] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] attempting to grow pool size by 2 
[INFO] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] Pool successfully grown by 2 
[INFO] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] Connection has been released. Continuing. 
[DEBUG] 2017-01-03 22:08:42 CurlHandleContainer [0x7fff755d1000] Returning connection handle 0x7f90bc00da00 
[DEBUG] 2017-01-03 22:08:42 CurlHttpClient [0x7fff755d1000] Obtained connection handle 0x7f90bc00da00 
[DEBUG] 2017-01-03 22:09:42 CurlHttpClient [0x7fff755d1000] Returned http response code 504 
[DEBUG] 2017-01-03 22:09:42 CurlHttpClient [0x7fff755d1000] Releasing curl handle 0x7f90bc00da00 
[DEBUG] 2017-01-03 22:09:42 CurlHandleContainer [0x7fff755d1000] Releasing curl handle 0x7f90bc00da00 
[DEBUG] 2017-01-03 22:09:42 CurlHandleContainer [0x7fff755d1000] Notified waiting threads. 
[DEBUG] 2017-01-03 22:09:42 AWSClient [0x7fff755d1000] Request returned error. Attempting to generate appropriate error codes from response 
[ERROR] 2017-01-03 22:09:42 AWSClient [0x7fff755d1000] No response body. Response code: 504 

Der Code ist:

Aws::IoT::Model::UpdateThingRequest request; 
Aws::IoT::Model::AttributePayload payload; 

payload.AddAttributes("manufacturer",manufacturer); 
payload.AddAttributes("product",product); 
payload.AddAttributes("type",type); 
payload.SetMerge(true); 

request 
    .WithThingName(name) 
    .WithAttributePayload(payload); 

auto outcome = _client->UpdateThing(request); 

if (outcome.IsSuccess()) { 
    log.info("Sucess"); 
} else { 
    log.info("Error: %s: %s",outcome.GetError().GetExceptionName().c_str(), 
      outcome.GetError().GetMessage().c_str()); 
} 
+0

Keine Antwort Körper? Das erscheint unerwartet. Ich frage mich, ob das ein gefälschter Fehlercode ist, lokal generiert ... –

+0

Ich glaube, das Fehlen eines Antwortkörpers ist auf die Zeitüberschreitung zurückzuführen. Ich muss genauer untersuchen, wie die POST-Interaktion im SDK implementiert wird. –

+0

Eigentlich sieht es so aus, als ob es mit der Art zusammenhängt, wie die Bibliothek Rest-PATCH-Aufrufe behandelt. POST-Methode funktioniert gut. Der AWS-REST-Dienst scheint auf den PATCH-Hauptteil zu warten und wird nicht vom Client gesendet. –

Antwort

1

Mein Problem auf diese Weise, dass die curl Mac OS X-Bibliothek (7.52.1) zu sein schien, war Behandeln der PATCH-Anfrage. In der Standardeinstellung wurde die registrierte Datenfunktion nicht aufgerufen (registriert über CURLOPT_READFUNCTION).

Ich löste dies, indem Sie die CurlHttpClient.cpp Datei patchen, um die CURLOPT_POST Option für eine PATCH-Anfrage hinzuzufügen.

https://github.com/aws/aws-sdk-cpp/pull/401

Verwandte Themen