Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El modelo de salida de Unified Point Of Service (UnifiedPOS) consta de dos tipos de salida: sincrónico y asincrónico. Un tipo de dispositivo POS puede admitir uno o ambos tipos, o bien ninguno de ellos.
Salida sincrónica
Cuando una aplicación usa un método sincrónico específico del tipo de dispositivo para escribir salidas, la operación de escritura tiene lugar en el mismo subproceso que llamó al método. Es posible que el objeto de servicio no se devuelva hasta que la operación de escritura se haya completado o genere un error.
El uso de salidas sincrónicas es sencillo, pero en teoría puede afectar al rendimiento de la aplicación si la salida no se puede completar con relativa rapidez. Los desarrolladores de objetos de servicio deben tener esto en cuenta.
Salida asincrónica
Algunos tipos de dispositivos POS admiten salidas asincrónicas. En el modelo de salida asincrónica, la aplicación llama al objeto de servicio para solicitar que la salida de datos se efectúe en el dispositivo. Sin embargo, a diferencia del modelo sincrónico, el objeto de servicio no debe esperar a que la operación de escritura se complete, sino que debe devolver el control a la aplicación lo antes posible. Cuando un objeto de servicio recibe una solicitud de la aplicación, debe hacer lo siguiente:
- Si el dispositivo físico no puede recibir datos, el objeto de servicio debe almacenarlo en búfer en memoria hasta que el dispositivo esté listo.
- Debe establecer la propiedad OutputId en un identificador de esta solicitud para su uso en eventos futuros que se envíen a la aplicación.
- Debe devolver lo antes posible.
Tras ello, el objeto de servicio debe esperar a que el dispositivo complete la solicitud. Normalmente, esto sucede en un subproceso aparte, administrado por el objeto de servicio, que el hardware supervisa. Una vez completada correctamente la solicitud, se pone en cola un evento OutputCompleteEvent, con OutputEventArgs.OutputId establecido en el identificador especificado anteriormente, para su entrega a la aplicación.
Cola administrada por objetos de servicio
La biblioteca de clases de POS para .NET ofrece compatibilidad con las salidas asincrónicas, lo cual es suficiente en casi todos los escenarios de objeto de servicio.
Sin embargo, hay algunos escenarios en los que es posible que los desarrolladores de objetos de servicio deban implementar su propio tratamiento de salidas asincrónicas. El escenario principal es admitir dispositivos que usen colas de impresión basadas en hardware. En este caso, el objeto de servicio establece UseExternalPrintQueue en true, invalida el método PreQueuePrintData e implementa su propio mecanismo de cola.
Cuando UseExternalPrintQueue se establece en true, la clase base ya no agrega las solicitudes de impresión a su cola asincrónica interna, por lo que serán los desarrolladores de objetos de servicio quienes decidan poner en cola los datos de la forma que crean conveniente. Esto suele hacerse usando las características de puesta en cola de impresión del hardware del dispositivo. La clase base sigue validando previamente las mismas solicitudes de impresión, pero no realiza ningún procesamiento más.
En estos casos, el objeto de servicio será responsable de lo siguiente:
- Implementar su propia lógica de puesta en cola
- Enviar eventos StatusUpdateEvents de las operaciones que sean correctas
- Enviar eventos ErrorEvents de las operaciones asincrónicas con errores y controlar los reintentos
- Actualizar la propiedad de estado
- Todas las demás operaciones asincrónicas definidas en la especificación UnifiedPOS
Consulte también
Tareas
- Ejemplo de controlador de eventos
- Ejemplo de salida asincrónica
- Presentación de subprocesos de lector de objetos de servicio