Hur du ansluter till ett SOAP API från Azure Data Factory
Har du någonsin behövt läsa data från ett SOAP API (web service) i din Azure Data Factory pipeline? Jag har, och skall här visa knepet för hur du löser detta.
Azure Data Factory (ADF) har för tillfället inte någon inbyggt SOAP connector. Detta har lyfts fram som önskemål, men för närvarande behöver du göra en slags workaround för att läsa från SOAP APIs.
Knepet är att använda en generell HTTP connector. Att konfigurera den för SOAP kan vara lite klurigt. Jag skall visa dig hur jag gjorde.
Steg 1 - Skapa en Linked Service
Börja med att skapa en linked service. Välj en HTTP connector.

Namnge din linked service och lägg till info om Base URL. Välj också Authentication type, som brukar vara Anonymous om du inte har fått några särskilda inloggningsuppgifter.

Steg 2 - Skapa ett Dataset
Skapa ett nytt dataset för ditt API. Välj HTTP typ igen och sedan XML format.

Peka ditt dataset till din linked service och ange Relative URL.

Steg 3 - Skapa en Pipeline
För att använda din SOAP API connector, skapa en pipeline. Lägg sedan till en Copy Data-activity och gå till Sourcefliken.
Välj ditt nyligen skapade dataset och ändra Request method till POST.

Frågan är nu vad som skall stå i Additional headers och Request body. Detta är den klurigaste delen!
Steg 4 - Fyll i SOAP Headers och Body
För att skapa SOAP headers och body så är det enklaste att använda ett SOAP testverktyg. Jag rekommenderar att använda SoapUI, some är ett gratis open source verktyg av SmartBear. Nedan är hur jag använder detta verktyg för att skapa headers och body.
När SoapUI startar så visar det en "Endpoint Explorer". Stäng det fönstret och klicka istället på New SOAP Project.
Ange URL till WSDL för din SOAP service. Du brukar få den genom att lägga till ?WSDL på URLen för din SOAP service. Kryssa också i "Create TestSuite" kryssrutan.

Fortsätt med att acceptera standardinställningarna i diaglogrutorna som följer. Se till att operationen du tänker använda är inkluderad.

Bara acceptera namnet.

Slutligen, expandera din TestSuite i Navigatorn och dubbelklicka på API operationen du vill använda.

Du får nu först bodyn. Copy/paste in denna i Request body i din Copy Data activity i Azure Data Factory.

Skriv sedan in lite exempeldata istället för frågetecknen och exekvera din SOAP request genom att klicka på playikonen uppe till vänster.

Byt nu till Raw-fliken till vänster för att visa headers. Copy/paste dina headers för Content-Type och Host in i din Azure Data Factory Copy Data activitet.

Slutresultat
Din Copy Data aktivitet bör nu se ut ungefär så här. Du kan nu klicka på Preview data för att testa den.

Parameterisera din SOAP query
Du kanske vill använda parametrar i din SOAP request. Inga problem. Klicka bara på "Add dynamic content" under Request body och skriv in något sådant här.
1@{replace(replace('<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/">
2 <soap:Header/>
3 <soap:Body>
4 <tem:Multiply>
5 <tem:a>?p1</tem:a>
6 <tem:b>?p2</tem:b>
7 </tem:Multiply>
8 </soap:Body>
9</soap:Envelope>', '?p1', pipeline().parameters.p1), '?p2', pipeline().parameters.p2)}
I exemplet ovan så är ?p1 och ?p2 enkla placeholders för dina parametrar. De ersätts med de aktuella värdena för parametrarna genom replace-metoden. Notera att replace kräver att parametrarna är strängar. Om de är av någon annan typ, så lägg bara på en konverting för att omvandla dem till strängar.
That's it! Lycka till.