Erreur d'intégration lors de l'exécution d'une intégration par socket
Symptôme
Lorsque vous exécutez une intégration socket ou que vous utilisez un emplacement réseau comme répertoire de numérisation, vous pouvez rencontrer un message d’erreur similaire dans les journaux :
ERROR|Integration [nom de la connexion] n’a pas pu envoyer le message. Détails : 'Impossible d’accéder à un objet supprimé.
Nom de l’objet : 'System.Net.Sockets.Socket'.'
S’applique à
BarTender 2019 et versions ultérieures
Integration Builder
Solution
Pour les intégrations FTP, cela peut indiquer que la connexion FTP a été temporairement refusée. Augmenter le temps d’interrogation de quelques secondes permet souvent de résoudre ce problème.
Pour les intégrations Socket, un symptôme de ce message d’erreur peut être le saut complet d’une impression d’étiquette. Pour les intégrations socket très sollicitées, ce message d’erreur apparaîtra probablement au milieu d’un flux important de requêtes socket ou parfois lorsque le socket est inactif.
Dans les intégrations très sollicitées, le socket ne se ferme pas toujours lorsqu’il est réglé sur Port devient inactif, donc de nouvelles requêtes s’adressent à un port déjà ouvert et passent sans être traitées.
Pour corriger cela, il faut contrôler comment et quand BarTender ouvre et ferme le socket. Dans la section Données d’entrée de votre intégration, vous pouvez forcer l’intégration à fermer le socket après avoir lu une certaine séquence de caractères.
Forcer la fermeture du socket
La méthode la plus simple consiste à rechercher la balise de fermeture dans le BTXML et à forcer la fermeture du socket juste après. Cette méthode est expliquée dans les étapes du tutoriel Imprimer un document en utilisant BTXML via un socket réseau.
Dans la section Données d’entrée de l’intégration, modifiez les paramètres comme suit :
Cela indique à l’intégration de couper le socket juste après avoir reçu </XMLScript>. La case à cocher permet de conserver la balise de fermeture dans les données d’entrée afin que le script BTXML soit traité correctement.
Terminer la connexion
Dans certains cas, forcer la fermeture du socket ne suffit pas. L’intégration ne ferme jamais le socket ou le flux est interrompu trop rapidement et les données sont coupées. D’autres cas incluent l’expéditeur qui attend une réponse spécifique pour fermer le socket. Dans ce cas, en plus de forcer la fin du flux de données après une certaine séquence de caractères, vous pouvez forcer la fermeture de la connexion du côté de BarTender en utilisant une action Envoyer vers le socket réseau.
Cette action forcera une réponse juste après la réception des données puis terminera la connexion.