SOAP-basierte API gibt 404- und 500 HTTP-Statuscodes zurück.
In Bezug auf den Artikel zur Azure API Management Troubleshooting Series ist dies das zweite Szenario des Labors. Stellen Sie sicher, dass Sie die Anweisungen zum Einrichten des Labors entsprechend befolgt haben, um das Problem neu zu erstellen.
Ursprüngliche Produktversion: API-Verwaltungsdienst
Ursprüngliche KB-Nummer: 4464934
Symptome
Die Rechner-API kann vier Vorgänge ausführen : Add, Subtrahieren, Multiplizieren und Dividieren basierend auf zwei Eingabeparametern intA und intB. Der Name der Vorgänge ist selbsterklärend, welche Funktion sie ausführen. Es handelt sich um einen ASMX-Dienst (http://www.dneonline.com/calculator.asmx) nach dem SOAP 1.1-Protokoll, sodass die Eingabeparameter im Soap-Umschlagtextabschnitt übergeben werden. Add- und Subtrahieren-Vorgänge funktionieren wie erwartet einwandfrei, aber beim Aufrufen des Multipliziervorgangs und http 500 beim Aufrufen des Dividierungsvorgangs tritt HTTP 404 auf.
Die erwartete Ausgabe des Multiplikationsvorgangs sollte etwa wie folgt aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<MultiplyResponse xmlns="http://tempuri.org/">
<MultiplyResult>int</MultiplyResult>
</MultiplyResponse>
</soap:Body>
</soap:Envelope>
Die erwartete Ausgabe des Dividierenvorgangs sollte ungefähr wie unten aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<DivideResponse xmlns="http://tempuri.org/">
<DivideResult>int</DivideResult>
</DivideResponse>
</soap:Body>
</soap:Envelope>
Schritte zur Fehlersuche
Sie müssen verstehen, wer diese HTTP 404- und 500-Antworten, APIM- oder Back-End-SOAP-API auslöst. Die beste Möglichkeit, diese Antwort zu erhalten, besteht darin, die APIM-Inspektorablaufverfolgung zu sammeln, um Anforderung und Antwort zu prüfen.
Multipliziervorgang, der HTTP - 404 (Not Found) Statuscode auslöst, gibt an, dass der Ursprungsserver keine aktuelle Darstellung für die Zielressource gefunden hat oder nicht bereit ist, offenzulegen, dass vorhanden ist.
Wenn Sie den Back-End-Abschnitt der APIM Inspector-Ablaufverfolgung untersuchen, wird dieselbe Beobachtung auch aus der Nachricht ersichtlich:
{ "backend": [ { "source": "configuration", "timestamp": "2018-07-29T12:30:08.3500317Z", "elapsed": "00:00:00.7276962", "data": { "message": "Unable to identify Api or Operation for this request. Responding to the caller with 404 Resource Not Found." } } ] }
Daher sollten Sie zuerst die Anforderungs-URL und Header untersuchen, die von APIM an die Back-End-API von der Registerkarte "Test " gesendet werden, und vergleichen Sie sie mit dem Beispiel der SOAP-Anforderung für den Multiplikationsvorgang - http://www.dneonline.com/calculator.asmx.
Anforderungsheader der APIM-Inspektorablaufverfolgung sehen ungefähr wie unten aus:
{ "data": { "request": { "method": "POST", "url": "https://pratyay.azure-api.net/calc", "headers": [ { "name": "Ocp-Apim-Subscription-Key", "value": "34ae22db7f2c4c5da7b74a55adf03223" }, { "name": "X-Forwarded-For", "value": "223.226.79.35" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Content-Length", "value": "292" }, { "name": "Content-Type", "value": "application/soap+xml; action=http://tempuri.org/Multiply" }, { "name": "Accept", "value": "*/*" }, { "name": "Accept-Encoding", "value": "gzip,deflate,br" }, { "name": "Accept-Language", "value": "en-US,en;q=0.5" }, { "name": "Host", "value": "pratyay.azure-api.net" }, { "name": "Referer", "value": "https://apimanagement.hosting.portal.azure.net/apimanagement/Content/1.0.385.3/apimap/apimap-apis/index.html?locale=en&trustedAuthority=https://ms.portal.azure.com" } ] } } }
Gemäß der Back-End-ASMX-Dienstdefinition würden Sie feststellen, dass die SOAP 1.1-Anforderung einen Anforderungsheader **SOAPAction benötigt, der in der anforderung fehlt, die von APIM gesendet wurde.
Host: www.dneonline.com Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/Multiply"
Das Hinzufügen des SOAPAction-Headers mit dem Wert http://tempuri.org/Multiply löst das Problem. Sie können den Anforderungsheader unter der Frontend-Definition des Multipliziervorgangs hinzufügen und den Wert als Standard unter der Registerkarte "Kopfzeilen " festlegen, sodass Sie diesen Header nicht jedes Mal bei jeder Anforderung senden müssen.
Der Vorgang, der den HTTP 500-Statuscode (Interner Serverfehler) auslöst, weist darauf hin, dass der Server eine unerwartete Bedingung festgestellt hat, die verhindert hat, die Anforderung zu erfüllen.
Mit anderen Worten, der Back-End-Dienst kann Ihren Anforderungstext nicht verarbeiten, der von APIM gesendet wird. Sie können den von APIM gesendeten Anforderungstext untersuchen.
Beim Überprüfen des SOAP-Texts würden Sie feststellen, dass der Nenner (intB) als Null festgelegt ist, was zu einer unbehandelten Ausnahme führt und somit HTTP 500 (Interner Serverfehler) verursacht.
POST calc HTTP/1.1 Host: pratyay.azure-api.net SOAPAction: http://tempuri.org/Divide Cache-Control: no-cache Ocp-Apim-Trace: true Content-Type: application/soap+xml; action=http://tempuri.org/Divide Ocp-Apim-Subscription-Key: ******************************** <?xml version="1.0" encoding="utf-8"?> <Envelope xmlns="http://www.w3.org/2003/05/soap-envelope"> <Body> <Divide xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/"> <intA>1</intA> <intB>0</intB> </Divide> </Body> </Envelope>
Wenn Sie die Anforderungsinhaltsdarstellung auf der Registerkarte "Anforderung" überprüfen, die in der Frontend-Definition des Dividieren-Vorgangs vorhanden ist, stellen Sie fest, dass der IntB-Wert auf Null festgelegt ist. Sie müssen den Wert von intB in einen Wert ungleich Null ändern und das Problem beheben.
Kontaktieren Sie uns für Hilfe
Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.