執行 Socket 整合時出現整合錯誤
症狀
當您執行 socket 整合或使用網路位置作為掃描目錄時,可能會在日誌中遇到如下錯誤訊息:
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 連線暫時被拒絕。將輪詢時間增加幾秒鐘通常可以解決這個問題。
對於 Socket 整合,這個錯誤訊息可能會導致標籤列印被完全跳過。若是非常繁忙的 socket 整合,這個錯誤訊息很可能會在大量 socket 請求處理過程中出現,或有時在 socket 閒置時發生。
在繁忙的整合情境下,socket 並不總是在設定為連接閒置時自動關閉,因此新的請求會直接連到已開啟的埠口,卻沒有被正確處理。
要解決這個問題,我們需要控制 BarTender 何時開啟與關閉 socket。在整合的輸入資料區段,您可以設定在讀取到特定字元序列後,強制整合關閉 socket。
強制關閉 Socket
這個方法可以協助您在 BarTender 端標示資料結束。不過,您仍需在發送端正確關閉 socket。
最直接的方式是搜尋 BTXML 中的結束標籤,並在其後立即強制關閉 socket。這個方法可參考透過網路 Socket 使用 BTXML 列印文件教學中的步驟。
在整合的輸入資料區段,請將設定更改如下:
這樣設定後,整合會在收到 </XMLScript> 後立即關閉 socket。勾選該選項可確保結束標籤會保留在輸入資料中,讓 BTXML 腳本能正確處理。
如果您發現這個方法無法關閉 socket,請參考下方其他選項。
終止連線
有些情況下,強制關閉 socket 仍然無效。整合可能從未關閉 socket,或資料流過早終止導致資料被截斷。也有可能發送端需要收到特定回應才會關閉 socket。這時,除了在特定字元序列後強制結束資料流外,您還可以在 BarTender 端使用傳送至網路 Socket動作來強制關閉連線。
這個動作會在接收完資料後立即回應,然後終止連線。