Erklärt: SOAP with Attachments (SWA) via Azure

26.03.2018

Ein Kunde hat eine Möglichkeit gesucht PDFs aus seinem Netz an eine alte SOAP-Schnittstelle zu verschicken. Gelöst wurde das ganze über einen ServiceBus, der die Dateien entgegennimmt, die von einem On-Premises BizTalk Server abgelegt werden. Der Service Bus leitet die PDF an eine Logic-App weiter. Die Logic App ruft eine Function auf, welche die PDF- Dateien an eine SOAP-Nachricht hängt und per SOAP versendet.

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:

  1. Azure bietet keinen SOAP-Connector (Stand März 2017)
  2. 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.

 

 

 

 

 

 

 

 

zurück

© 2018 QUIBIQ GmbH · AGB und Nutzungsbedingungen