Procesar mensajes de notificación para completar tareas específicas en SQL mediante BizTalk Server
Puede usar el adaptador de SQL para recibir notificaciones de cambios en SQL Server tablas de base de datos. Sin embargo, el adaptador solo le envía una notificación de que algunos registros se insertaron, actualizaron o eliminaron en una tabla de base de datos determinada. Las propias aplicaciones cliente deben controlar cualquier procesamiento posterior en esos registros. En este tema se presenta una descripción basada en escenarios sobre cómo procesar los registros de la tabla en función del tipo de notificación recibida de la base de datos de SQL Server.
Escenarios para realizar acciones posteriores después de recibir una notificación
A continuación se muestran un par de escenarios en los que los clientes del adaptador deben realizar ciertas tareas posteriores a la notificación.
Escenario 1. Considere un escenario en el que el cliente del adaptador debe realizar determinadas tareas en función del tipo de notificación que reciba de SQL Server. Por ejemplo, la aplicación cliente debe actualizar los registros de la tabla "A" si los registros se insertan en la tabla "B". De forma similar, la aplicación cliente debe eliminar registros de la tabla "A" si los registros se eliminan de la tabla "B".
En este escenario, desde el mensaje de notificación recibido, los clientes del adaptador deben extraer el tipo de notificación para decidir si la notificación era para una operación de inserción o una operación de eliminación. Una vez comprobado el tipo de notificación, los clientes del adaptador deben realizar acciones posteriores para insertar o actualizar las tablas pertinentes.
Escenario 2. Considere un escenario en el que la ubicación de recepción que recibe mensajes de notificación para los cambios en una tabla deja de funcionar. Mientras la ubicación de recepción está inactiva, algunos registros se agregan a la tabla. Sin embargo, para estos registros, el cliente del adaptador no recibe ninguna notificación. Cuando se realiza una copia de seguridad de la ubicación de recepción, el adaptador notifica al cliente mediante el envío de un mensaje específico y, a continuación, la aplicación cliente debe buscar todos los registros que se insertaron en la tabla de base de datos mientras la ubicación de recepción estaba inactiva.
En este escenario, desde el mensaje de notificación recibido, los clientes del adaptador deben extraer la información relacionada con si la notificación es para un cambio en una tabla de base de datos o para la ubicación de recepción que se inicia. Si la notificación es para el inicio de la ubicación de recepción, los clientes del adaptador deben implementar la lógica para procesar los registros que podrían haberse insertado, actualizado o eliminado mientras la ubicación de recepción estaba inactiva.
Nota
Estos son solo algunos escenarios de ejemplo que se enumeran para comprender mejor cómo usar la característica de notificación en el adaptador de SQL. Sin embargo, el conjunto básico de tareas necesarias para extraer el tipo de notificación recibido será similar para todos los escenarios. En este tema se proporcionan instrucciones sobre cómo extraer el tipo de notificación de un mensaje de notificación.
Cómo en este tema se muestra cómo recibir mensajes de notificación y extraer el tipo de notificación
En este tema, para mostrar cómo procesar los mensajes de notificación para realizar tareas posteriores, se considera un escenario básico en el que un cliente de adaptador usa la aplicación de BizTalk para recibir mensajes de notificación para los cambios en la tabla Employee. Una vez recibida la notificación, el cliente filtra el tipo de notificación recibida y realiza la acción posterior. Para demostrar un escenario muy básico, consideremos que el cliente del adaptador copia los mensajes de notificación en diferentes carpetas en función del tipo de notificación recibido. Así pues, siga estas pautas:
Si el mensaje de notificación es para una operación de inserción o actualización, el cliente del adaptador copia el mensaje en la carpeta C:\TestLocation\UpsertNotification.
Si el mensaje de notificación es para cualquier otra operación, por ejemplo Eliminar, el cliente del adaptador copia el mensaje en la carpeta C:\TestLocation\OtherNotificaiton.
Para lograrlo como parte de una aplicación de BizTalk, la orquestación debe contener lo siguiente:
Puerto de recepción unidireccional para recibir mensajes de notificación.
Forma expresión que contiene una consulta xpath para extraer la información sobre el tipo de mensaje de notificación recibido.
Una forma Decidir para incluir un bloque de decisión en la orquestación. En este bloque de decisión, la aplicación decide qué operaciones posteriores realizar en función del mensaje de notificación recibido.
Dos puertos de envío unidireccionales que finalmente reciben los mensajes de notificación.
Configuración de notificaciones con las propiedades de enlace del adaptador de SQL
En la tabla siguiente se resumen las propiedades de enlace del adaptador de SQL que se usan para configurar la recepción de notificaciones de SQL Server. Debe especificar estas propiedades de enlace al configurar el puerto de recepción en la consola de administración de BizTalk Server.
Nota
Puede optar por especificar estas propiedades de enlace al generar el esquema para la operación notificación , aunque no sea obligatorio. Si lo hace, el archivo de enlace de puerto que genera el Complemento de servicio de adaptador de consumo como parte de la generación de metadatos también contiene los valores que especifique para las propiedades de enlace. Más adelante puede importar este archivo de enlace en la consola de administración de BizTalk Server para crear el puerto de recepción WCF-custom o WCF-SQL con las propiedades de enlace ya establecidas. Para obtener más información sobre cómo crear un puerto mediante el archivo de enlace, consulte Configuración de un enlace de puerto físico mediante un archivo de enlace de puerto para usar el adaptador de SQL.
Binding (propiedad) | Descripción |
---|---|
InboundOperationType | Especifica la operación de entrada que desea realizar. Para recibir mensajes de notificación, establezca esta opción en Notificación. |
NotificationStatement | Especifica la instrucción SQL (procedimiento> almacenado SELECT o EXEC<) que se usa para registrarse para las notificaciones de consulta. El adaptador obtiene un mensaje de notificación de SQL Server solo cuando cambia el conjunto de resultados de la instrucción SQL especificada. |
NotifyOnListenerStart | Especifica si el adaptador envía una notificación a los clientes del adaptador cuando se inicia el agente de escucha. |
Para obtener una descripción más completa de estas propiedades, vea Leer sobre el adaptador de BizTalk para SQL Server propiedades de enlace del adaptador. Para obtener una descripción completa de cómo usar el adaptador de SQL para recibir notificaciones de SQL Server, lea más información.
Cómo recibir mensajes de notificación de la base de datos de SQL Server
Realizar una operación en la base de datos de SQL Server mediante el adaptador de SQL con BizTalk Server implica las tareas de procedimientos descritas en Bloques de creación para desarrollar aplicaciones de BizTalk con el adaptador de SQL. Para configurar el adaptador para recibir mensajes de notificación, estas tareas son:
Cree un proyecto de BizTalk y, a continuación, genere el esquema para la operación de entrada de notificación. Opcionalmente, puede especificar valores para las propiedades de enlace InboundOperationType y NotificationStatement .
Cree un mensaje en el proyecto de BizTalk para recibir notificaciones de la base de datos de SQL Server.
Cree una orquestación como se describe en la sección anterior.
Compile e implemente el proyecto de BizTalk.
Configure la aplicación de BizTalk mediante la creación de puertos físicos de envío y recepción.
Nota
Para las operaciones entrantes, como recibir mensajes de notificación, solo debe configurar un puerto de recepción unidireccional WCF-Custom o WCF-SQL. Los puertos de recepción de WCF-Custom bidireccionales o WCF-SQL no se admiten para las operaciones entrantes.
Inicie la aplicación de BizTalk.
En este tema se proporcionan instrucciones para realizar estas tareas.
Generación de esquema
Debe generar el esquema para la operación de entrada de notificación. Consulte Recuperación de metadatos para SQL Server operaciones en Visual Studio mediante el adaptador de SQL para obtener más información sobre cómo generar el esquema. Realice las siguientes tareas al generar el esquema. Omita el primer paso si no desea especificar las propiedades de enlace en tiempo de diseño.
Especifique un valor para las propiedades de enlace InboundOperationType y NotificationStatement al generar el esquema. Para obtener más información sobre esta propiedad de enlace, vea Leer sobre el adaptador de BizTalk para SQL Server propiedades de enlace del adaptador. Para obtener instrucciones sobre cómo especificar propiedades de enlace, consulte Configuración de las propiedades de enlace para el adaptador de SQL.
Seleccione el tipo de contrato como Servicio (operaciones de entrada).
Generar esquema para la operación de notificación .
Definición de mensajes y tipos de mensajes
El esquema que generó anteriormente describe los "tipos" necesarios para los mensajes de la orquestación. Normalmente, un mensaje es una variable, el tipo para el que se define mediante el esquema correspondiente. Una vez generado el esquema, debe vincularlo a los mensajes de la vista Orquestación del proyecto de BizTalk.
Para este tema, debe crear un mensaje para recibir notificaciones de la base de datos de SQL Server.
Realice los pasos siguientes para crear mensajes y vincularlos al esquema.
Para crear mensajes y vincular al esquema
Agregue una orquestación al proyecto de BizTalk. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto de BizTalk, seleccione Agregar y, a continuación, haga clic en Nuevo elemento. Escriba un nombre para la orquestación de BizTalk y, a continuación, haga clic en Agregar.
Abra la ventana de vista de orquestación del proyecto de BizTalk, si aún no está abierta. Haga clic en Ver, seleccione Otras ventanas y, a continuación, haga clic en Vista de orquestación.
En la vista Orquestación, haga clic con el botón derecho en Mensajes y, a continuación, haga clic en Nuevo mensaje.
Haga clic con el botón derecho en el mensaje recién creado y, a continuación, seleccione Ventana Propiedades.
En el panel Propiedades de Message_1, haga lo siguiente:
Use Para hacer esto Identificador Escriba NotifyReceive
.Tipo de mensaje En la lista desplegable, expanda Esquemas y seleccione Process_Notification.Notification, donde Process_Notification es el nombre del proyecto de BizTalk. La notificación es el esquema generado para la operación de notificación .
Configuración de la orquestación
Debe crear una orquestación de BizTalk para usar BizTalk Server para recibir mensajes de notificación de la base de datos de SQL Server y, a continuación, realizar tareas basadas en el tipo de notificación recibida. En esta orquestación, el adaptador recibe el mensaje de notificación basado en la instrucción SELECT especificada para la propiedad de enlace NotificationStatement . La consulta xpath especificada dentro de la forma Expresión extrae el tipo de notificación en una variable, por ejemplo , NotificationType. La forma Decidir usa el valor de esta variable para decidir el tipo de notificación recibido y toma la "ruta de acceso" adecuada para realizar operaciones posteriores. Como se mencionó en la sección anterior, la orquestación realizará las siguientes operaciones en función del tipo de mensaje de notificación recibido.
Si el mensaje de notificación es para una operación de inserción o actualización, el cliente del adaptador copia el mensaje en la carpeta C:\TestLocation\UpsertNotification.
Si el mensaje de notificación es para cualquier otra operación, por ejemplo Eliminar, el cliente del adaptador copia el mensaje en la carpeta C:\TestLocation\OtherNotificaiton.
Por lo tanto, la orquestación debe contener lo siguiente:
Puerto de recepción unidireccional para recibir mensajes de notificación.
Forma expresión que contiene una consulta xpath para extraer el tipo de notificación recibida.
Una forma Decidir para incluir un bloque de decisión en la orquestación. En este bloque de decisión, la aplicación decide qué operaciones posteriores realizar en función del mensaje de notificación recibido.
Dos puertos de envío unidireccionales que finalmente reciben los mensajes de notificación.
Forma de recepción.
Una orquestación de ejemplo es similar a la siguiente.
Agregar formas de mensaje
Asegúrese de especificar las siguientes propiedades para cada una de las formas de mensaje. Los nombres enumerados en la columna Shape son los nombres de las formas de mensaje que se muestran en la orquestación mencionada.
Forma | Tipo de forma | Propiedades |
---|---|---|
ReceiveNotification | Recepción | - Establecer el nombre en ReceiveNotification - Establecer Activar en True |
Agregar una forma de expresión
El propósito de incluir una forma expresión en la orquestación es tener una consulta xpath para extraer el tipo de mensaje de notificación recibido. Antes de crear una consulta xpath, echemos un vistazo al formato de un mensaje de notificación. Un mensaje de notificación típico es similar al siguiente:
<Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/">
<Info>Insert</Info>
<Source>Data</Source>
<Type>Change</Type>
</Notification>
Como ve, la información sobre el tipo de notificación está disponible dentro de la <info>
etiqueta , dentro de la etiqueta primaria <Notification>
. Por lo tanto, como parte de esta forma de expresión debe:
Cree una variable que contenga el valor dentro de la
<Info>
etiqueta y establezca su tipo en System.String. Para obtener más información sobre la creación de variables, vea Uso de variables en orquestaciones.Para este tema, asigne a la variable el nombre NotificationType.
Cree una consulta xpath para extraer el valor de la <etiqueta Info> . La consulta xpath será similar a la siguiente:
NotificationType = xpath(NotifyReceive,"string(/*[local-name()='Notification']/*[local-name()='Info']/text())");
En esta consulta xpath, NotifyReceive es el mensaje que creó para recibir mensajes de notificación. El extracto de la
string
función indica que la consulta debe extraer el valor dentro de la<Info>
etiqueta , que a su vez está dentro de la<Notification>
etiqueta . Por último, el valor extraído por la consulta se asigna a la variable NotificaitonType .
Agregar una forma Decidir
El propósito de agregar una forma Decidir es incluir un bloque de decisión en la orquestación para decidir qué operaciones posteriores realizar en función del tipo de mensaje de notificación recibido. La decisión se toma sobre la base del valor de la variable NotificationType . En este tema, la orquestación toma una decisión basada en el tipo de mensaje de notificación recibido. Por lo tanto, la condición de la forma Regla se especifica de la siguiente manera:
NotificationType.Equals("Insert") | NotificationType.Equals("Update")
Esta condición sugiere que si el valor de la variable NotificaitonType es Insert o Update, la orquestación realizará un conjunto de tareas. Si el valor de la variable NotificationType es cualquier otra cosa, la orquestación realizará otro conjunto de tareas.
Como se mencionó en las secciones anteriores, para demostrar un enfoque sencillo, la orquestación copiará los mensajes en diferentes carpetas en función del tipo de mensaje de notificación. Por lo tanto, dentro de los bloques Regla y Else, debe agregar formas de envío para enviar los mensajes a diferentes puertos. Para este tema, asigne a la forma Enviar en el bloque Regla como SendUpsertNotification y la forma Send en el bloque Else como SendOtherNotification.
Adición de puertos
Ahora debe agregar los siguientes puertos lógicos a la orquestación:
Puerto de recepción unidireccional para recibir mensajes de notificación de SQL Server.
Puerto de envío unidireccional para enviar mensajes de notificación para las operaciones insertar y actualizar a una carpeta específica.
Puerto de envío unidireccional para enviar mensajes de notificación para cualquier otra operación a una carpeta específica.
Asegúrese de especificar las siguientes propiedades para cada uno de los puertos lógicos. Los nombres enumerados en la columna Puerto son los nombres de los puertos como se muestra en la orquestación.
Port | Propiedades |
---|---|
SQLNotifyPort | - Establecer identificador en SQLNotifyPort - Establecer tipo en SQLNotifyPortType - Establecer el patrón de comunicación en unidireccional - Establecer la dirección de comunicación para recibir |
NotificationUpsertPort | - Establecer identificador en NotificationUpsertPort - Establecer tipo en NotificationUpsertPortType - Establecer el patrón de comunicación en unidireccional - Establecer la dirección de comunicación en enviar |
OtherNotificationPort | - Establecer el identificador en OtherNotificationPort - Establecer tipo en OtherNotificationPortType - Establecer el patrón de comunicación en unidireccional - Establecer la dirección de comunicación en enviar |
Especificar mensajes para formas de acción y conectarse a puertos
En la tabla siguiente se especifican las propiedades y sus valores que se deben establecer para especificar mensajes para las formas de acción y para vincular los mensajes a los puertos. Los nombres enumerados en la columna Shape son los nombres de las formas de mensaje tal como se muestran en la orquestación mencionada anteriormente.
Forma | Propiedades |
---|---|
ReceiveNotification | - Establecer mensaje en NotifyReceive - Establecer la operación en SQLNotifyPort.Notify.Request |
SendUpsertNotification | - Establecer mensaje en NotifyReceive - Establecer la operación en NotificationUpsertPort.Upsert.Request |
SendOtherNotification | - Establecer mensaje en Seleccionar - Establecer la operación en OtherNotificationPort.Other.Request |
Después de especificar estas propiedades, se conectan las formas y los puertos del mensaje y se completa la orquestación.
Ahora debe compilar la solución de BizTalk e implementarla en un BizTalk Server. Para obtener más información, vea Compilar y ejecutar orquestaciones.
Configuración de la aplicación de BizTalk
Después de implementar el proyecto de BizTalk, la orquestación que creó anteriormente aparece en el panel Orquestaciones de la consola de administración de BizTalk Server. Debe usar la consola de administración de BizTalk Server para configurar la aplicación. Para ver un tutorial, consulte Tutorial: Implementación de una aplicación básica de BizTalk.
La configuración de una aplicación implica:
Selección de un host para la aplicación.
Asignación de los puertos que creó en la orquestación a puertos físicos en la consola de administración de BizTalk Server. Para esta orquestación debe:
Defina un puerto de recepción unidireccional de WCF-Custom físicos o WCF-SQL. Este puerto escucha las notificaciones procedentes de la base de datos SQL Server. Para obtener información sobre cómo crear puertos, consulte Configuración manual de un enlace de puerto físico al adaptador de SQL. Asegúrese de especificar las siguientes propiedades de enlace para el puerto de recepción.
Importante
No es necesario realizar este paso si especificó las propiedades de enlace en tiempo de diseño. En tal caso, puede crear un puerto de recepción WCF-custom o WCF-SQL, con las propiedades de enlace necesarias establecidas, importando el archivo de enlace creado por el complemento consumir servicio adaptador. Para obtener más información, consulte Configuración de un enlace de puerto físico mediante un archivo de enlace de puertos para usar el adaptador de SQL.
Binding (propiedad) Value InboundOperationType Establézcalo en Notificación. NotificationStatement Establézcalo en:
SELECT Employee_ID, Name FROM dbo.Employee WHERE Status=0
Nota: Debe especificar específicamente los nombres de columna en la instrucción como se muestra en esta instrucción SELECT. Además, siempre debe especificar el nombre de la tabla junto con el nombre del esquema. Por ejemplo,dbo.Employee
.NotifyOnListenerStart Establézcalo en True. Para obtener más información sobre las diferentes propiedades de enlace, vea Leer sobre el adaptador de BizTalk para SQL Server propiedades de enlace del adaptador.
Nota
Se recomienda configurar el nivel de aislamiento de transacción y el tiempo de espera de la transacción al realizar operaciones entrantes mediante el adaptador de SQL. Para ello, agregue el comportamiento del servicio al configurar el puerto de recepción de WCF-Custom o WCF-SQL. Para obtener instrucciones sobre cómo agregar el comportamiento del servicio, vea Configurar el nivel de aislamiento de transacción y el tiempo de espera de transacción con SQL.
Defina una ubicación en el disco duro y un puerto de archivo correspondiente donde la orquestación de BizTalk quitará los mensajes de notificación de la base de datos de SQL Server para las operaciones de inserción y actualización. Configure este puerto para quitar mensajes de notificación en la carpeta C:\TestLocation\UpsertNotification.
Defina una ubicación en el disco duro y un puerto de archivo correspondiente donde la orquestación de BizTalk quitará los mensajes de notificación de la base de datos de SQL Server para todas las demás operaciones. Configure este puerto para quitar mensajes de notificación en la carpeta C:\TestLocation\OtherNotification.
Iniciar la aplicación
Debe iniciar la aplicación de BizTalk para recibir mensajes de notificación de la base de datos de SQL Server y para realizar las siguientes operaciones Select y Update. Para obtener instrucciones sobre cómo iniciar una aplicación de BizTalk, vea Cómo iniciar una orquestación.
En esta fase, asegúrese de:
El puerto de recepción unidireccional WCF-Custom o WCF-SQL, que recibe los mensajes de notificación de la base de datos SQL Server se está ejecutando.
Los dos puertos de envío FILE, que reciben mensajes de SQL Server, se están ejecutando.
La orquestación de BizTalk para la operación se está ejecutando.
Ejecución de la operación
Después de iniciar la orquestación de BizTalk, se realiza el siguiente conjunto de acciones:
Dado que la propiedad de enlace NotifyOnListenerStart está establecida en True, recibirá el siguiente mensaje:
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>ListenerStarted</Info> <Source>SqlBinding</Source> <Type>Startup</Type> </Notification>
Tenga en cuenta que el valor de la
<Info>
etiqueta es "ListnerStarted". Por lo tanto, este mensaje se recibe en la carpeta C:\TestLocation\OtherNotification.Inserte un registro en la tabla Employee. Recibirá un mensaje de notificación similar al siguiente:
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>Insert</Info> <Source>Data</Source> <Type>Change</Type> </Notification>
Tenga en cuenta que el valor de la
<Info>
etiqueta es "Insertar". Por lo tanto, este mensaje se recibe en la carpeta C:\TestLocation\UpsertNotification.Actualice un registro en la tabla Employee. Recibirá un mensaje de notificación similar al siguiente:
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>Update</Info> <Source>Data</Source> <Type>Change</Type> </Notification>
Tenga en cuenta que el valor de la
<Info>
etiqueta es "Update". Por lo tanto, este mensaje se recibe en la carpeta C:\TestLocation\UpsertNotification.Elimine un registro de la tabla Employee. Recibirá un mensaje de notificación similar al siguiente:
<?xml version="1.0" encoding="utf-8" ?> <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>Delete</Info> <Source>Data</Source> <Type>Change</Type> </Notification>
Tenga en cuenta que el valor de la
<Info>
etiqueta es "Delete". Por lo tanto, este mensaje se recibe en la carpeta C:\TestLocation\OtherNotification.
Prácticas recomendadas
Después de haber implementado y configurado el proyecto de BizTalk, puede exportar las opciones de configuración a un archivo XML denominado archivo de enlace. Una vez que genere un archivo de enlace, puede importar los valores de configuración del archivo, de modo que no necesite crear los puertos de envío y recibir puertos para la misma orquestación. Para obtener más información sobre los archivos de enlace, consulte Reutilización de enlaces de adaptador.
Realización de operaciones complejas después de recibir mensajes de notificación
Para simplificar y comprender mejor, la orquestación de este tema copia los mensajes en diferentes carpetas en función del tipo de notificación. Sin embargo, en escenarios reales, es posible que quiera realizar operaciones más complejas. Puede realizar procedimientos similares como se proporciona en este tema y basarse en ellos para realizar las operaciones que desee. Por ejemplo, puede cambiar la orquestación para insertar registros en otra tabla si recibe un mensaje de notificación para una operación Insertar en la tabla Employee. En tal caso, puede realizar los cambios adecuados dentro de la forma Decidir.
Uno de estos escenarios se explica con detalle en tutorial 2: Proceso de pedido de compra mediante el adaptador de SQL.
Consulte también
Recepción de notificaciones de consulta SQL mediante BizTalk Server