Unified Point Of Service (UnifiedPOS) の出力モデルは、同期と非同期の 2 つの出力タイプで構成されます。 POS デバイスの種類には、一方または両方のタイプをサポートするもの、またはどちらのタイプもサポートしないものがあります。
同期出力
アプリケーションでデバイスの種類に固有の同期メソッドを使って出力を書き込む場合、書き込み操作はメソッドを呼び出したのと同じスレッドで実行されます。 サービス オブジェクトは、書き込み操作が完了するか失敗するまで戻りません。
同期出力は簡単に使用できますが、出力を比較的短時間で完了できない場合は、アプリケーションのパフォーマンスに影響を与える可能性があります。 サービス オブジェクトの開発者はこれを考慮する必要があります。
非同期出力
特定の POS デバイスの種類では、非同期出力がサポートされています。 非同期出力モデルでは、アプリケーションはサービス オブジェクトを呼び出して、データをデバイスに出力するように要求します。 ただし、同期モデルとは異なり、サービス オブジェクトは書き込み操作が完了するまで待つ必要はありません。代わりに、できるだけ早くアプリケーションに制御を返す必要があります。 サービス オブジェクトは、アプリケーションから要求を受信したら、次のことを行う必要があります。
- 物理デバイスがデータを受信できない場合、サービス オブジェクトは、デバイスの準備ができるまでメモリにバッファーする必要があります。
- OutputId プロパティをこの要求の識別子に設定し、それ以降にアプリケーションに送信されるイベントで使われるようにします。
- できるだけ早く戻ります。
その後、サービス オブジェクトは、デバイスが要求を完了するまで待機する必要があります。 通常、これは、サービス オブジェクトによって管理される別のスレッドでハードウェアを監視することによって行われます。 要求が正常に完了すると、前に指定した識別子が OutputEventArgs.OutputId に設定されている OutputCompleteEvent イベントが、アプリケーションへの配信のためにキューに登録されます。
サービス オブジェクトのマネージド キュー
POS for .NET のクラス ライブラリでは、サービス オブジェクトのほぼすべてのシナリオに十分な非同期出力のサポートが提供されています。
ただし、一部のシナリオでは、サービス オブジェクトの開発者が独自の非同期出力処理を実装することが必要になる場合があります。 主なシナリオは、ハードウェア ベースの印刷キューをサポートするデバイスに対応する場合です。 この場合、サービス オブジェクトは UseExternalPrintQueue を true に設定し、PreQueuePrintData メソッドをオーバーライドして、独自のキュー メカニズムを実装します。
UseExternalPrintQueue が true に設定されていると、Base クラスは内部非同期キューに印刷要求を追加しなくなるため、サービス オブジェクトの開発者が必要な方法でデータをキューに登録する必要があります。 多くの場合、これはデバイスのハードウェア印刷キュー機能を使って行われます。 その場合でも Base クラスは同じ印刷要求を事前に検証しますが、追加処理は何も行いません。
このような場合、サービス オブジェクトには次のことを行う責任があります。
- 独自のキュー ロジックの実装。
- 正常な操作に対する StatusUpdateEvents の送信。
- 失敗した非同期操作に対する ErrorEvents の送信と、再試行の処理。
- 状態プロパティの更新。
- UnifiedPOS の仕様で定義されているその他のすべての非同期操作。
参照
タスク
その他の参照情報
.NET