Show/Hide Toolbars

Therefore™ Referenz

Wie funktioniert "Funktion aufrufen"?

 

Ein grundlegendes Verständnis der Funktionsweise dieser Aktivität kann die Problembehandlung unterstützen. Das folgende Diagramm zeigt, wie die verschiedenen Komponenten miteinander interagieren.

 

SD_T_Workflow_Cust_TFO_016

Wenn die Workflow Engine die Aktivität "Funktion aufrufen" ausführt, wird eine HTTPS POST-Anfrage an die betreffende Funktion gesendet. Wenn der Aufruf erfolgreich ist, wird die Funktion ausgeführt und sie ruft wahrscheinlich über die Web-API den Therefore™-Server auf, um Dokumente, Indexdaten oder andere zusätzliche Informationen abzurufen, die sie für ihre Zwecke benötigt.

 

Bei der aufgerufenen Funktion kann es sich um eine Azure-Funktion, einen Webdienst oder eine beliebige ausführbare Datei handeln, die auf HTTPS POST-Anfragen reagieren kann. Die aufgerufene Funktion muss jedoch ein JSON-Objekt zurückliefern, das die Zeichenfolge "TheError" sowie entweder den Booleschen Wert "TheRoutingDone" oder die Ganzzahl "TheRetryAfterMin" enthält. Wenn die Funktion von Therefore™ entwickelt wurde, kann sie im Therefore™ Online-Azure-Abonnement gehostet werden.

 

Aus Sicherheitsgründen müssen von Kunden entwickelte Funktionen in ihrem eigenen Azure-Abonnement oder in ihrer eigenen Infrastruktur ausgeführt werden.

 

Wie im Diagramm gezeigt, sind alle Verbindungen zwischen Therefore™ und der aufgerufenen Funktion HTTPS POST-Anfragen und (Web-) API-Aufrufe. Kundencode wird weder vom Serverdienst noch in der Therefore™ Online-Umgebung ausgeführt. Beim Ausführen von Web-API-Aufrufen gelten wie normal alle Zugriffsrechtprüfungen. Der mit der HTTPS-Anfrage bereitgestellte Zugriffstoken gilt nur für die aktuelle Workflow-Instanz. Aufgrund dieser Architektur ist das Anpassen von Workflows für den Gebrauch in Therefore™ Online sicher.

 

Wie werden Fehlermeldungen protokolliert?

 

Alle Fehlermeldungen, die auftreten, sollten im Workflow-Verlauf festgehalten werden.

 

Wie im Architekturdiagramm gezeigt, sendet Therefore™ lediglich eine HTTPS-Anfrage, während das wichtigste Element (der Kundencode) innerhalb der aufgerufenen Funktion ausgeführt wird.

 

Wenn die Funktion fehlschlägt, sollten alle aufgetretenen Fehler an Therefore™ gemeldet werden, um sie im Workflow-Verlauf zu protokollieren. Wenn die Funktion einen Fehler zurückgeliefert hat, beginnt der betreffende Eintrag im Workflow-Verlauf mit “Die aufgerufene Funktion hat einen Fehler zurückgeliefert”. Wenn die Funktion aufgrund einer unbehandelten Ausnahme abstürzt oder einfach keine Informationen zurückliefert, kann Therefore™ nichts protokollieren. Wenn eine Funktion ein JSON-Objekt mit einer leeren Zeichenfolge "TheError" und "TheRoutingDone" auf "false" eingerichtet zurückliefert, wird die Ausführung als bereits erfolgreich angesehen, da der HTTPS-Aufruf funktioniert hat und kein Fehler gemeldet wurde.

 

Nachfolgend finden Sie eine Reihe von Fehlern, die auftreten können, wenn eine Funktion aufgerufen wird:

 

Eintrag im Workflow-Verlauf beginnt mit…

Problembeschreibung

Der Workflow ist auf einen Fehler gestoßen. Beim Senden der Anfrage ist ein Fehler aufgetreten.

Die Anfrage konnte aufgrund eines Netzwerkproblems nicht gesendet werden. Stellen Sie sicher, dass der URL korrekt und der erforderliche Port offen ist (Port 80, wenn nicht anders konfiguriert).

Die Funktion wurde erfolgreich aufgerufen, aber sie hat eine Wiederholung in %d Minuten angefordert.

Die Funktion hat "TheRetryAfterMin" in der Anfrage zurückgeliefert. Die Workflow-Engine wartet %d Minuten und ruft die Funktion dann erneut auf. Dies ist kein Fehler und es wird im Workflow-Verlauf lediglich als zusätzliche Informationen protokolliert.

Bei der HTTP-Anfrage an '%s' ist eine Zeitüberschreitung aufgetreten.

Die Anfrage wurde erfolgreich gesendet, aber die Funktion hat innerhalb des 4-Minuten-Zeitlimits nichts zurückgeliefert.

Die aufgerufene Funktion hat einen verbindlichen Wert nicht zurückgeliefert.

Die Funktion muss ein JSON-Objekt zurückliefern, das der Spezifikation entspricht.

Die aufgerufene Funktion hat einen Fehler zurückgeliefert.

Die Anfrage war erfolgreich, aber in der Funktion ist ein Fehler aufgetreten. Die Informationen nach dieser Zeichenfolge sollten zeigen, wo der Fehler entstanden ist.

Die aufgerufene Funktion hat einen Fehler zurückgeliefert. Es konnte keine Verbindung eingerichtet werden, weil der Zielcomputer den Verbindungsversuch aktiv zurückgewiesen hat.

Die Anfrage war erfolgreich, aber das Einrichten einer Verbindung zum XML Web Service über die Web-API ist fehlgeschlagen. Der Grund dafür könnte ein Netzwerkproblem sein oder dass die Servereinstellung "URL für Web-API" nicht korrekt konfiguriert ist.

Die aufgerufene Funktion hat einen Fehler zurückgeliefert. Basis-URL für Web-API nicht eingerichtet.

"URL für Web-API" in den erweiterten Servereinstellungen ist nicht eingerichtet.

Die aufgerufene Funktion hat einen Fehler zurückgeliefert. Zugriff verweigert.

Der Web-API-Aufruf hatte keine ausreichenden Zugriffsrechte. Es müssen zusätzliche Zugriffsrechte gewährt werden.

Die aufgerufene Funktion hat einen Fehler zurückgeliefert. Sie dürfen nicht…

Der Web-API-Aufruf hatte keine ausreichenden Zugriffsrechte. Es müssen zusätzliche Zugriffsrechte gewährt werden.

HTTP-Anfrage fehlgeschlagen mit dem Statuscode 401.

Der Statuscode 401 bedeutet "Nicht autorisiert". Es wurde ein falscher Funktionsschlüssel für den Aufruf der Azure-Funktion angegeben.

HTTP-Anfrage fehlgeschlagen mit dem Statuscode 404.

Der Statuscode 404 bedeutet "Nicht gefunden". Der konfigurierte URL ist falsch.

HTTP-Anfrage fehlgeschlagen mit dem Statuscode 403.

Der Statuscode 403 bedeutet "Nicht zugelassen". Die aufgerufene Azure-Funktion ist nicht aktiv.

HTTP-Anfrage fehlgeschlagen mit dem Statuscode 500.

Der Statuscode 500 bedeutet "Interner Serverfehler". Dies kann geschehen, wenn eine unbehandelte Ausnahme aufgetreten ist. Nähere Einzelheiten dazu, welche Operanden Sie für Volltextsuchen verwenden können, finden Sie unter Überwachung in Azure Portal.

 

Wie funktioniert die Überwachung im Azure-Portal?

 

Zum Überwachen von Azure-Funktionen sollten die "Application Insights" von Microsoft konfiguriert sein. Sie können eine Liste der letzten Funktionsaufrufe anzeigen, wenn Sie die gewünschte Funktion im Azure-Portal auswählen und dann auf "Monitor" klicken.

 

SD_T_Workflow_Cust_TFO_017


Funktionsaufrufe werden als erfolgreich angezeigt, wenn keine unbehandelte Ausnahme aufgetreten ist, unabhängig vom Ergebniscode oder von abgefangenen Ausnahmen. Therefore™ behandelt dies ähnlich – wenn eine Ausnahme abgefangen wurde, sollte sie mit dem Statuscode 200 und den Informationen zur Ausnahme in der zurückgelieferten Zeichenfolge "TheError" gemeldet werden.

 

Wenn dagegen eine unbehandelte Ausnahme aufgetreten ist, kann nichts aus der Funktion an Therefore™ zurückgeliefert werden und der Webdienst sendet lediglich den Statuscode 500. In einem solchen Fall können keine weiteren Informationen als der Statuscode 500 in Therefore™ angezeigt werden und Sie müssen die Azure-Überwachung auf Einzelheiten überprüfen.

 

Über die "Operation ID" können Sie die Ausnahmetabelle auf Einzelheiten und die Stack Traces abfragen. Kopieren Sie die "Operation ID" und klicken Sie auf "Run in Application Insights", um sie in einer neuen Registerkarte zu öffnen.

 

SD_T_Workflow_Cust_TFO_018

Fügen Sie die "Operation ID" in das Abfragefenster ein und geben Sie eine Abfrage wie die folgende ein:

 

exceptions | where operation_Id == "OperationID"

| limit 50

 

Nachdem Sie auf "Run" geklickt haben, sollten dann Ausnahmeinformationen zu der betreffenden "Operation ID" aufgelistet werden.

 

Sie sollten mindestens eine Zeile mit Ausnahmeinformationen sehen.

 

SD_T_Workflow_Cust_TFO_019

 

Exportieren Sie alle Zeilen und senden Sie sie an den für diese Azure-Funktion verantwortlichen Entwickler.

 

Prüfen Sie auch die Trace-Tabelle auf zusätzliche Workflow-Informationen. Wenn ein Beispielprojekt verwendet wurde, sollte jeder Funktionsaufruf mit "instance-number", "token-number" sowie "case-number" oder "document-number" protokolliert sein.

 

SD_T_Workflow_Cust_TFO_020

 

Kopieren Sie die obige Abfrage und ersetzen Sie "exceptions" durch "traces":

 

traces | where operation_Id == "OperationID"

| limit 50

 

Machen Sie diese Informationen ebenfalls verfügbar, wenn Sie den Entwickler kontaktieren.

 

Wenn die Funktion Konvertierungsaktivitäten ausführt, sollte das entsprechende Dokument ebenfalls bereitgestellt werden.

 

Häufig gestellte Fragen zur Entwicklung

 

Wo und wie kann ich eine Azure-Funktion entwickeln?

 

Die Entwicklung einer Azure-Funktion kann vollständig in Visual Studio geschehen, ohne dass dazu ein Azure-Abonnement erforderlich ist. Nachdem Sie eine Azure-Funktion über den Projektassistenten erstellt haben, können Sie sie durch Drücken von F5 starten. Der Debugger mit Unterbrechungspunkten funktioniert genau wie bei anderen Anwendungen auch.

 

Muss ich ein Azure-Abonnement haben?

 

Nicht für die Entwicklung und das Testen. Azure-Funktionen können direkt in Visual Studio geschrieben und ausgeführt werden. Wenn das Entwicklungssystem öffentlich über HTTP zugänglich ist, könnte es sogar mit Therefore™ Online verwendet werden. Um die Azure-Funktion in einer Produktionsumgebung auszuführen, wird ein Azure-Abonnement benötigt. Es ist jedoch auch möglich, eine Funktion für einen Webdienst zu erstellen, der nicht in Microsoft Azure gehostet wird. In diesem Fall ist kein Abonnement erforderlich.

 

Warum liefert meine Funktion einen verbindlichen Parameter nicht zurück?

 

Alle Funktionen, die von der Aktivität "Funktion aufrufen" aufgerufen werden, müssen ein JSON-Objekt zurückliefern, das die Zeichenfolge "TheError" sowie entweder den Booleschen Wert "TheRoutingDone" oder die Ganzzahl "TheRetryAfterMin" enthält.

Wenn kein Fehler aufgetreten ist, wird "TheError" leer sein, aber die Zeichenfolge muss im JSON-Objekt vorliegen. Im Fall eines Fehlers ist es jedoch wichtig, die Ausnahme abzufangen und sie über "TheError" zur Protokollierung an Therefore™ weiterzuleiten.

 

Wie kann ich meine (Azure-) Funktion ohne Therefore™ testen?

 

Besonders im Frühstadium der Entwicklung von (Azure-) Funktionen kann es einfacher sein, die Funktion zu Testzwecken direkt aufzurufen. Mit cURL kann dies über den folgenden Befehl geschehen:

curl –d “” –i –X POST http://localhost:Port/api/Route

Wenn die Funktion bereits in Azure implementiert ist, verwenden Sie anstelle dessen den folgenden Befehl:

curl –d “” –i –X POST “https://AppName.azurwebsites.net/api/Route?code=FunctionKey”

Die Route kann in Code definiert werden. Wenn sie nicht definiert ist, wird anstelle dessen der Funktionsname verwendet.

 

Aufrufen der Web-API-Ergebnisse in "Zugriff verweigert" oder "Sie dürfen nicht…"

 

Aus Sicherheitsgründen hat der bereitgestellte JWT-Token nur sehr beschränkte Zugriffsrechte und es wird daher wahrscheinlich zu Rechteproblemen kommen. Wenn zusätzliche Zugriffsrechte erforderlich sind, müssen Sie einen internen Benutzer erstellen, der alle erforderlichen Rechte hat. Die Anmeldeinformationen können dann in "WebAPIUser" und "WebAPIPassword" übergeben werden, indem Sie diese im Azure-Portal als Anwendungseinstellung oder für die lokale Entwicklung zur Datei "local.settings.json" hinzufügen.

 

Kann ich die Therefore™-API für meine Funktion verwenden?

 

Dies hängt von der Plattform ab, die Sie benutzen. Bei Azure-Funktionen muss die Therefore™ Web API verwendet werden, da die normale API zu viele Abhängigkeiten hat.

© 2024 Therefore Corporation, alle Rechte vorbehalten.