Integrationsfehler beim Ausführen einer Socket-Integration
Symptom
Wenn Sie eine Socket-Integration ausführen oder einen Netzwerkpfad als Scan-Verzeichnis verwenden, kann im Protokoll folgende Fehlermeldung erscheinen:
ERROR|Integration [Verbindungsname] konnte die Nachricht nicht senden. Details: 'Kann nicht auf ein freigegebenes Objekt zugreifen.
Objektname: 'System.Net.Sockets.Socket'.'
Gilt für
BarTender 2019 und neuer
Integration Builder
Lösung
Bei FTP-Integrationen kann dies darauf hindeuten, dass die FTP-Verbindung vorübergehend abgelehnt wurde. Wenn Sie das Abfrageintervall um ein paar Sekunden erhöhen, lässt sich das Problem oft beheben.
Bei Socket-Integrationen kann dieses Fehlerbild dazu führen, dass ein Etikettendruck komplett übersprungen wird. Besonders bei sehr ausgelasteten Socket-Integrationen tritt diese Fehlermeldung häufig mitten im Datenstrom oder manchmal auch im Leerlauf des Sockets auf.
In stark ausgelasteten Integrationen wird der Socket nicht immer geschlossen, wenn Port wird inaktiv eingestellt ist. Neue Anfragen richten sich dann an einen bereits offenen Port und werden durchgelassen, ohne verarbeitet zu werden.
Um das zu beheben, müssen wir steuern, wie und wann BarTender den Socket öffnet und schließt. Im Bereich Eingabedaten Ihrer Integration können Sie erzwingen, dass der Socket nach dem Einlesen einer bestimmten Zeichenfolge geschlossen wird.
Socket zwangsweise schließen
Am einfachsten ist es, nach dem Schließen-Tag im BTXML zu suchen und den Socket direkt danach zu schließen. Diese Methode wird in den Schritten des Tutorials Dokument mit BTXML über ein Netzwerk-Socket drucken gezeigt.
Ändern Sie im Bereich Eingabedaten der Integration die Einstellungen wie folgt:
Damit wird die Integration angewiesen, den Socket direkt nach dem Empfang von </XMLScript> zu schließen. Das Kontrollkästchen sorgt dafür, dass das Schließen-Tag in den Eingabedaten erhalten bleibt, sodass das BTXML-Skript korrekt verarbeitet wird.
Verbindung beenden
In manchen Fällen reicht das erzwungene Schließen des Sockets nicht aus. Die Integration schließt den Socket nie oder der Datenstrom wird zu schnell beendet, sodass Daten abgeschnitten werden. In anderen Fällen erwartet der Sender eine bestimmte Antwort, um den Socket zu schließen. In diesem Fall können Sie zusätzlich zum Erzwingen des Datenendes nach einer bestimmten Zeichenfolge die Verbindung auf BarTenders Seite mit einer An Netzwerk-Socket senden-Aktion schließen.
Diese Aktion erzwingt eine Antwort direkt nach dem Empfang der Daten und beendet dann die Verbindung.