Um den Überblick nicht zu verlieren waren die Archive unter bestimmten Kundenordnern abgelegt.
Source-Folder Struktur: Data\Kunde
Es sollten nun also alle Archive aus den Dateien gefiltert, entpackt und in den Target Folder gespeichert werden.
TargetFolder Struktur: Unzipped\Kunde
Ebenfalls wichtig zu wissen ist, dass es sehr große Archive waren, die in mehrere Teile aufgeteilt wurden und manchmal mit Passwörtern gesichert waren.
Entpackvorgang, wenn alle Dateien vorhanden:
Entpackvorgang, wenn Dateien fehlen:
Also suchte ich nach einem Framework, das mir genau diese Funktionen bietet…
Ich stieß auf das Framework „SevenZipSharp“ von SquidBox.
Mein erster Test bestand daraus, dass ich versucht lokal einzelnes Archiv, so wie ein großes Archiv das in Teile gesplittet war zu entpacken. Das funktioniert ohne Probleme!
Es wurde also ein SevenZipExtractor erzeugt. Als Übergabeparameter musste der Pfad des Archivs und das Passwort übergeben werden. Beim ExtractArchive werden alle zugehörigen Dateien in den Zielpfad extrahiert.
Im nächsten Schritt sollten also die Dateien vom einen Fileshare-Ordner in den anderen entpackt werden. Um Zugriff auf den Fileshare zu bekommen, nutzte ich das Azure Storage Files Shares Framework. Da man an die Dateien des Fileshares nur anhand eines Streams herankommt, suchte ich im SevenZipSharp Framework nach einer Methode, die genau die gleichen Funktionen bietet, wie beim lokalen Extrahieren.
Ich suchte und suchte und suchte…
Also war Testing angesagt…
Wir versuchten einige Dinge, wie z. B. den UNC Pfad der Datei zu nutzen, oder den Fileshare als Netzlaufwerk einzubinden. Doch nichts funktionierte.
Wir kamen zu dem Entschluss, dass nichts daran vorbeiführt, die Dateien herunterzuladen und diese lokal auf der Maschine, auf der die Azure Function ausgeführt wird, zu entpacken und wieder hochzuladen. Der Workaround sah also folgendermaßen aus:
Als die Funktionalität der Azure Function dafür fertiggestellt war, wurde sie zum finalen Test Deployed und ausgeführt.
Nach fünf Minuten endete die Function im Timeout…
Auch das Erhöhen des Timeouts auf 10 Minuten änderte nichts.
Wie wir das Problem mit dem Timeout gelöst haben, könnt ihr im nächsten Part lesen.
Dieser quiTeq-Tipp ist von Nico, QUIBIQ Stuttgart.