Compartir a través de


Interacción con la cola MAPI

Hace referencia a: Outlook 2013 | Outlook 2016

La cola MAPI usa los métodos de la interfaz IXPLogon : IUnknown al llamar al proveedor de transporte. Debe ser posible que la mayoría de los tipos de proveedores de transporte implementen la mayoría de estos métodos para que vuelvan rápidamente. Esto es deseable porque si un método tarda mucho tiempo en devolverse, se debe dividir con llamadas a la cola MAPI para liberar la CPU para otras tareas.

La cola MAPI realiza su trabajo y realiza sus llamadas a proveedores de transporte cuando las aplicaciones en primer plano están inactivas. Después de mostrar opcionalmente los cuadros de diálogo cuando el proveedor de transporte inicia sesión por primera vez (regido por marcas pasadas desde MAPI al proveedor de transporte), los proveedores de transporte funcionan en segundo plano a menos que el cliente llame a para vaciar las colas de envío y recepción. El vaciado de colas es la única vez que un proveedor de transporte no necesita liberar la CPU y, a continuación, solo si se informa al usuario de que hay una acción potencialmente larga en curso. La cola MAPI normalmente solicita que un proveedor de transporte vacíe sus colas en respuesta a una acción del usuario, por lo que el proveedor de transporte normalmente no necesita hacer nada para asegurarse de que se informa al usuario.

Un proveedor de transporte puede decidir de forma independiente vaciar una cola y usar los bits STATUS_INBOUND_FLUSH y STATUS_OUTBOUND_FLUSH de la propiedad PR_STATUS_CODE (PidTagStatusCode) de su fila de estado para informar a la cola MAPI de que desea atención para que pueda realizar el trabajo. La fila de estado se actualiza mediante el método IMAPISupport::ModifyStatusRow . En este caso, el proveedor de transporte probablemente debería mostrar un indicador de progreso u otra interfaz para informar al usuario de que se está realizando una acción larga.

Dado que la actividad de red suele tardar más de 0,2 segundos, los proveedores de transporte deben, siempre que sea posible, usar solicitudes de red asincrónicas. Esto les permite iniciar una solicitud, liberar la CPU llamando de vuelta a la cola MAPI y, cuando la cola MAPI de nuevo les da control, para comprobar si su solicitud de red se ha completado. Si aún no se ha completado, de nuevo liberan la CPU llamando a la cola MAPI con el método IMAPISupport::SpoolerYield .

Durante el procesamiento de mensajes, entre IXPLogon::SubmitMessage e IXPLogon::EndMessage y durante IXPLogon::StartMessage, el proveedor de transporte suele realizar muchas llamadas a objetos expuestos a él por la cola MAPI. Como parte de su control de estos objetos, la cola MAPI ayuda al proveedor de transporte a comportarse adecuadamente como un proceso en segundo plano al producir por sí mismo cuando corresponda. Un proveedor de transporte que requiere procesamiento crítico en el tiempo puede declarar una sección crítica para la cola MAPI mediante el método de objeto de soporte técnico IMAPISupport::SpoolerNotify . En este caso, el proveedor de transporte libera la CPU solo en llamadas SpoolerYield explícitas hasta que el proveedor de transporte finaliza el procesamiento de secciones críticas con otra llamada a SpoolerNotify.

Nota:

Esto no es lo mismo que una sección crítica de Win32. Esto solo debe realizarse cuando el proveedor de transporte necesita el control en tiempo real de los recursos externos, como la lectura de datos entrantes desde una línea de fax. Dado que esto aumenta la prioridad del proceso de cola MAPI y puede hacer que la estación de trabajo no responda durante la operación, es una buena idea notificar al usuario que se está llevando a cabo una acción potencialmente larga y proporcionar un indicador de progreso si es posible.