Crear instancias e inicializar un adaptador de envío
De forma predeterminada, los adaptadores de envío no se crean instancias hasta que el primer mensaje se entrega a ellos, un proceso conocido como "creación diferida". El enfoque de creación diferida predeterminado ayuda a conservar los recursos del sistema. El adaptador de envío, una vez creado, se almacena en caché y está activo hasta que se detiene el servicio de BizTalk Server.
El miembro InitTransmitterOnServiceStart de la enumeración Capabilities dirige al motor de mensajería para crear el adaptador de envío al iniciar el servicio, en lugar de usar la creación diferida predeterminada, si se desea.
El modelo de enviar un mensaje es diferente del de recibir un mensaje en cuanto al procesamiento por lotes de los mensajes. En el caso de la recepción, el adaptador tiene mensajes entrantes que insertar en un lote obtenido del motor de mensajería. En el caso del envío, el motor de mensajería obtiene un lote del adaptador y envía mensajes al adaptador para que se transmitan. En ambos casos, se usa el proxy de transporte para obtener los objetos de lote de mensajes.
Cómo se inicializa un adaptador de envío
Para habilitar la configuración y el enlace al proxy de transporte, los adaptadores deben implementar las interfaces de configuración siguientes:
IBTTransport
IBaseComponent
IBTTransportControl
IPersistPropertyBag
Los pasos siguientes describen la secuencia de eventos que conlleva la inicialización de un adaptador de envío:
Cuando el motor de mensajería inicializa un adaptador de envío, primero realiza queryInterface para IPersistPropertyBag, que es una interfaz opcional. Si el adaptador implementa la interfaz , la configuración del controlador se pasa al adaptador en la llamada al método Load . El adaptador usa esta información para asegurarse de que está configurado correctamente.
El motor de mensajería realiza una queryInterface para IBTTransportControl, que es una interfaz obligatoria.
El motor llama a IBTTransportControl.Initialize, pasando el proxy de transporte para el adaptador.
El motor de mensajería realiza queryInterface para IBTTransmitter.
Si el motor de mensajería detecta esta interfaz, el adaptador se considera como un transmisor no compatible con lotes.
Si el motor de mensajería no detecta esta interfaz, el motor de mensajería realiza una consultaInterface para IBTBatchTransmitter, detección de la que indica que el adaptador es un transmisor compatible con lotes.
Si el motor de mensajería no detecta ninguna de estas interfaces, se produce un error de inicialización. Este error ocurre cuando no se detecta alguna de las interfaces obligatorias.
En el diagrama siguiente se muestra esta secuencia de llamadas a la API; las interfaces de color azul son las que implementa el adaptador.
El adaptador puede enviar mensajes justo después de inicializarse y configurarse.
La ilustración siguiente muestra las interacciones de objetos que conlleva la inicialización de un adaptador de envío.
Flujo de trabajo correspondiente a la inicialización de un adaptador de envío
Nota
Los adaptadores no deben bloquear el motor de mensajería en llamadas como IBTTransportControl.Initialize e IPersistPropertyBag.Load. Un procesamiento excesivo en estas llamadas afecta al tiempo de inicio del servicio.