运行套接字集成时出现集成错误
症状
当运行套接字集成或使用网络位置作为扫描目录时,您可能会在日志中遇到如下错误信息:
ERROR|Integration [connection name] failed to send message. Details: 'Cannot access a disposed object.
Object name: 'System.Net.Sockets.Socket'.'
适用范围
BarTender 2019 及更高版本
Integration Builder
解决方法
对于 FTP 集成,这可能表示 FTP 连接被临时拒绝。将轮询时间增加几秒钟通常可以缓解此问题。
对于套接字集成,这个错误信息可能会导致标签打印被完全跳过。对于非常繁忙的套接字集成,这个错误通常会出现在大量套接字请求处理中,或者有时在套接字空闲时出现。
在繁忙的集成中,套接字在设置为端口空闲时并不总是会关闭,因此新的请求实际上是在已打开的端口上进行,导致请求通过但未被处理。
为了解决这个问题,我们需要控制 BarTender 何时打开和关闭套接字。在集成的输入数据部分,您可以强制集成在读取到特定字符序列后关闭套接字。
强制关闭套接字
此方法可以帮助您在 BarTender 端标记数据结束。您仍然需要在发送端正确关闭套接字。
最直接的方法是在 BTXML 中查找结束标签,并在其后立即强制关闭套接字。此方法可参考通过网络套接字使用 BTXML 打印文档教程中的步骤。
在集成的输入数据部分,将设置更改如下:
这样设置后,集成会在接收到 </XMLScript> 后立即关闭套接字。勾选该复选框可以确保结束标签保留在输入数据中,从而保证 BTXML 脚本能够正确处理。
如果您发现此方法无法关闭套接字,请参见下方的其他选项。
终止连接
在某些情况下,强制关闭套接字还不够。集成可能从未关闭套接字,或者数据流被过早终止导致数据被截断。还有一些情况是发送端需要收到特定响应后才会关闭套接字。此时,除了在特定字符序列后强制结束数据流外,您还可以在 BarTender 端使用发送到网络套接字操作来强制关闭连接。
此操作会在接收完数据后立即发送响应,然后终止连接。