SOAP ist eine solide und etablierte Möglichkeit für Austausch von Nachrichten über ein Rechnernetz. Der SOAP-Service, der die Nachrichten und PDFs entgegennehmen sollte, war eine alter SOAP-Service, der in der Lage war SOAP with Attachments entgegen zu nehmen. Das bedeutet, dass die Dateianhänge (ähnlich wie bei einer E-Mail) an eine SOAP-Nachricht angehängt werden.
Um SOAP Nachichten mit Dateianhängen via Azure zu verschicken gab es folgende Probleme zu bewältigen:
- Azure bietet keinen SOAP-Connector (Stand März 2017)
- WCF “Out of the Box” unterstützt „SOAP with Attachments“ nicht
Aus diesen Gründen musste man eine Lösung hierfür selbst implementieren. Glücklicherweise hatte schon jemand dieses „WCF mit SOAP- Attachments“-Problem und hat dafür Code bereitgestellt.
Link: https://code.msdn.microsoft.com/Send-Soap-with-Attachments-3784e5f6
Dieser Code wurde verwendet und in eine Wrapper-Klasse gepackt. Die Klasse enthält eine statische Methode namens CallService. Die Methode CallService erhält folgende Parameter:
- fileId (Hiermit wird die Datei eindeutig identifiziert)
- attachment (die Datei als String)
- url (wird verwendet um den Endpunkt zu bestimmen)
Mit dieser Implementierung war es nun möglich aus einer .NET- Anwendung „SOAP with Attachments“ zu verschicken, aber noch nicht aus der Cloud. Problem mit den Attachments war hiermit gelöst. Nun musste man nur noch diese Methode in die Cloud heben.
Um diesen Aufruf aus der Cloud zu realisieren musste man nun die Assembly in die Cloud bringen um die Methode CallService aus einer Function aufzurufen.
Es wird eine Function App in Azure um die DLL hochzuladen. Nachdem man die Function App erstellt hat, hat man die Möglichkeit unter „Platform features“ und „Advanced Tools“ die Assembly hochzuladen.
Man hat mit „Advanced Tools“ die Möglichkeit Dateien hochzuladen. Hierzu legt man einen bin-Ordner an und verschiebt die Assembly per Drag-and-Drop in das Verzeichnis.
Nachdem Hochladen der Assembly kann man diese nun referenzieren, wie eine .NET- Assembly. In einer Function fügt man DLLs mit „#r“ (siehe Screenshot) hinzu und wie gewohnt die using-Direktive.
Alternativ ist es auch möglich Functions im Visual Studio zu entwickeln und zu deployen. Dann werden die DLLs beim Deployment aus dem Visual Studio in denselben Ordner hochgeladen.
In der Function kann nun die Call-Service Methode aufgerufen werden aus der Cloud heraus. Das Problem die Methode in die Cloud zu heben war hiermit auch gelöst.
Nachdem die Function erstellt ist fehlt nur noch die Logic App, die für folgende Punkte verantwortlich ist:
- PDF vom Service Bus abholen
- PDF Metadaten auslesen (FileID)
- Function aufrufen
- Response der Function verarbeiten
Autor: Ugur K.