裝置輸出模型 (POS for .NET v1.14 SDK 文件)
統一服務點 (UnifiedPOS) 輸出模型包含兩種輸出類型:同步與非同步。 POS 裝置類型可能支援一或兩種類型,或兩種類型都不支援。
同步輸出
當應用程式利用裝置類型相關的同步方法來寫入輸出時,寫入作業會在呼叫方法的執行緒上執行。 服務物件需等到寫入作業完成或失敗才會傳回。
利用同步輸出很簡單,但如果無法相對快速地完成輸出,可能會影響應用程式效能。 服務物件開發人員應將此狀況納入考量。
非同步輸出
部分 POS 裝置類型支援非同步輸出。 在非同步輸出模型中,應用程式會呼叫服務物件,要求將資料輸出至裝置, 不過,不同於同步模型,服務物件絕不能等待寫入作業完成,而需盡快將控制權傳回應用程式。 當服務物件收到應用程式的要求時,應執行下列動作:
- 如果實體裝置無法接收資料,服務物件應在記憶體中對裝置進行緩衝處理,直到裝置就緒為止。
- 將 OutputId 屬性設為此要求的識別碼,在未來傳送至應用程式的事件中使用。
- 結果會盡快傳回。
屆時,服務物件必須等候裝置完成要求。 一般而言,此動作會透過受控於服務物件 (可監視硬體) 的獨立執行緒完成。 在要求順利完成之後,OutputCompleteEvent 事件 (當中的 OutputEventArgs.OutputId 設為先前指定的識別碼) 會排入傳遞至應用程式的佇列。
服務物件受控佇列
POS for .NET 的 類別庫提供非同步輸出支援,對於幾乎所有的服務物件案例來說已足夠。
不過,在部分情況下,服務物件開發人員可能需實作他們自己的非同步輸出處理方法。 主要案例是針對支援硬體列印佇列裝置提供支援。 在這個情況下,服務物件會將 UseExternalPrintQueue 設為 true,覆寫 PreQueuePrintData 方法,並實作他們自己的佇列機制。
若 UseExternalPrintQueue 設為 true,Base 類別就不會再將列印要求新增至其內部的非同步佇列,因此服務物件開發人員可以他們需要的任何方式將資料排入佇列。 這個作業通常是透過裝置的硬體列印佇列功能完成。 Base 類別仍會預先驗證相同的列印要求,但不會進行任何額外處理。
在這些情況下,服務物件會負責下列事項:
- 實作自己的佇列邏輯。
- 針對成功的作業傳送 StatusUpdateEvents。
- 針對失敗的非同步作業傳送 ErrorEvents,並處理重試作業。
- 更新狀態屬性。
- UnifiedPOS 規格所定義的其他所有非同步作業。