Compartir a través de


Recibir notificaciones de consulta incrementalmente desde SQL mediante BizTalk Server

Importante

Por motivos de brevedad, en este tema solo se describe cómo recibir notificaciones de forma incremental. En escenarios empresariales, la orquestación debe incluir idealmente la lógica para extraer el tipo de mensaje de notificación recibido y, a continuación, realizar las operaciones posteriores. En otras palabras, la orquestación descrita en este tema debe basarse en la orquestación descrita en Procesar mensajes de notificación para completar tareas específicas en SQL mediante BizTalk Server.

En este tema se muestra cómo configurar el adaptador de SQL para recibir mensajes de notificación de consultas incrementales de una base de datos de SQL Server. Para demostrar las notificaciones incrementales, considere una tabla, Employee, con una columna "Status". Cuando se inserta un nuevo registro en esta tabla, el valor de la columna Estado se establece en 0. Puede configurar el adaptador para recibir notificaciones incrementales haciendo lo siguiente:

  • Regístrese para recibir notificaciones mediante una instrucción SQL que recupere todos los registros que tienen la columna Estado como 0. Para ello, especifique la instrucción SQL para la propiedad de enlace NotificationStatement .

  • Para las filas para las que se han recibido mensajes de notificación, actualice la columna Estado a 1.

    En este tema se muestra cómo crear una orquestación de BizTalk y configurar una aplicación de BizTalk para lograrlo.

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 especificar estas propiedades de enlace al generar el esquema para la operación de notificación , aunque no sea obligatorio. Si lo hace, el archivo de enlace de puerto que genera el complemento consumir servicio de adaptador como parte de la generación de metadatos también contiene los valores que especifique para las propiedades de enlace. Posteriormente, 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 puertos 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.

Cómo muestra este tema la recepción de mensajes de notificación

Para demostrar cómo el adaptador de SQL admite la recepción de mensajes de notificación de SQL Server, en este tema se muestra cómo configurar el adaptador para recibir notificaciones de cambios en una tabla Employee. Supongamos que la tabla Employee tiene columnas Employee_ID, Name y Status. Cada vez que se agrega un nuevo empleado, el valor de la columna Estado se establece en 0.

Para demostrar la recepción de notificaciones, haga lo siguiente:

  • Generar esquema para la notificación (operación de entrada) y Seleccionar (operación de salida) en la tabla Employee.

  • Cree una orquestación que tenga lo siguiente:

    • Una ubicación de recepción para recibir mensajes de notificación. Puede configurar para la notificación especificando la instrucción SELECT como:

      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.

    • Puerto de envío para actualizar las filas para las que ya se ha enviado la notificación. Para ello, establezca el valor en la columna Estado en 1. Puede hacerlo como parte de la operación Seleccionar enviando el siguiente mensaje al adaptador.

      <Select xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">  
        <Columns>Employee_ID,Name,Status</Columns>  
        <Query>where Status=0;UPDATE Employee SET Status=1 WHERE Status=0</Query>  
      </Select>  
      

      En este mensaje, como parte del <Query> elemento , se especifica la instrucción UPDATE para actualizar la columna Estado. Tenga en cuenta que esta operación debe ejecutarse después de recibir los mensajes de notificación para que se actualicen las filas procesadas. Para evitar la sobrecarga de esperar a obtener la respuesta de notificación y, a continuación, quitar manualmente un mensaje de solicitud para actualizar las filas, generará el mensaje de solicitud para actualizar las filas dentro de la propia orquestación. Puede hacerlo mediante la forma Construir mensaje dentro de una orquestación.

Recepción de mensajes de notificación de la base de datos de SQL Server

Realizar una operación en la base de datos 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:

  1. Cree un proyecto de BizTalk y, a continuación, genere el esquema para la notificación (operación de entrada) y Seleccione (operación de salida) en la tabla Employee. Opcionalmente, puede especificar valores para las propiedades de enlace InboundOperationType y NotificationStatement .

  2. Cree un mensaje en el proyecto de BizTalk para recibir notificaciones de la base de datos de SQL Server.

  3. Cree mensajes en el proyecto de BizTalk para realizar la selección de información en la base de datos de SQL Server y recibir mensajes de respuesta.

  4. Cree una orquestación que haga lo siguiente:

    • Recibe un mensaje de notificación de SQL Server.

    • Crea un mensaje para seleccionar y actualizar las filas para las que se recibe la notificación.

    • Envía este mensaje al SQL Server para actualizar las filas y recibe una respuesta.

  5. Compile e implemente el proyecto de BizTalk.

  6. 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.

  7. Inicie la aplicación de BizTalk.

    En este tema se proporcionan instrucciones para realizar estas tareas.

Ejemplo basado en este tema

Se proporciona un ejemplo, IncrementalNotification, basado en este tema con el paquete de adaptadores de BizTalk. Para obtener más información, vea Ejemplos para el adaptador de SQL.

Generar esquema

Debe generar el esquema para la operación notificación y seleccionar operación en la tabla Employee. Consulte Obtención de metadatos para operaciones de SQL Server en Visual Studio mediante el adaptador de SQL para obtener más información sobre cómo generar el esquema. Realice las tareas siguientes al generar el esquema. Omita el primer paso si no desea especificar las propiedades de enlace en tiempo de diseño.

  1. 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.

  2. Seleccione el tipo de contrato como Servicio (operaciones de entrada).

  3. Generar esquema para la operación de notificación .

  4. Seleccione el tipo de contrato como Cliente (operaciones salientes).

  5. Generar esquema para la operación Select en la tabla Employee .

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 tres mensajes: uno para recibir notificaciones de la base de datos de SQL Server, una para realizar la operación Select y otra para recibir la respuesta de la operación Select.

Realice los pasos siguientes para crear mensajes y vincularlos al esquema.

  1. 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.

  2. 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.

  3. En la vista Orquestación, haga clic con el botón derecho en Mensajes y, a continuación, haga clic en Nuevo mensaje.

  4. Haga clic con el botón derecho en el mensaje recién creado y, a continuación, seleccione Ventana Propiedades.

  5. 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 SQLNotify.Notification, donde SQLNotify es el nombre del proyecto de BizTalk. La notificación es el esquema generado para la operación de notificación .
  6. Repita el paso 3 para crear dos mensajes nuevos. En el panel Propiedades del nuevo mensaje, haga lo siguiente:

    Establecer identificador en Establecer el tipo de mensaje en
    Seleccionar SQLNotify.TableOperation_dbo_Employee.Select, donde TableOperation_dbo_Employee es el esquema generado para la operación Select
    SeleccionarResponse SQLNotify.TableOperation_dbo_Employee.SelectResponse

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, actualizar las filas para las que se recibió la notificación. 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 . El mensaje de notificación se recibe en una ubicación FILE. Una vez recibida la respuesta, la orquestación crea un mensaje que se usará para actualizar las filas para las que se recibe la notificación. La respuesta de este mensaje también se recibe en la misma ubicación DE ARCHIVO.

Por lo tanto, la orquestación debe contener lo siguiente:

  • Puerto de recepción unidireccional para recibir mensajes de notificación.

  • Puerto de envío bidireccional para enviar mensajes para actualizar filas y recibir respuesta para lo mismo.

  • Forma Construir mensaje para construir mensajes, para ejecutar la operación De actualización, dentro de la orquestación.

  • Un puerto de envío FILE para guardar la respuesta de la operación De actualización.

  • Recibir y enviar formas.

    Una orquestación de ejemplo es similar a la siguiente.

    Orquestación para recibir notificaciones de SQL Server

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
SaveNotification Envío - Establecer nombre en SaveNotification
SendSelectMessage Envío - Establecer el nombre en SendSelectMessage
ReceiveSelectResponse Recepción - Establecer nombre en ReceiveSelectResponse
SaveSelectResponse Envío - Establecer nombre en SaveSelectResponse

Agregar forma de mensaje de construcción

Puede usar la forma Construir mensaje para generar un mensaje de solicitud dentro de la operación para realizar la operación Seleccionar. Para ello, debe agregar una forma Construir mensaje y dentro de esa forma de asignación de mensajes a la orquestación. En este ejemplo, la forma Asignación de mensajes invoca código que genera un mensaje que se envía a SQL Server para realizar la operación Select. La forma Asignación de mensajes también establece la acción para que el mensaje se envíe a SQL Server.

Para la forma del mensaje de construcción, establezca la propiedad Message Con construct enSelect.

El código para generar la respuesta podría formar parte de la misma solución de Visual Studio que el proyecto de BizTalk. Un código de ejemplo para generar un mensaje de respuesta tiene este aspecto.

namespace SampleMessageCreator  
{  
    public class SampleMessageCreator  
    {  
        private static XmlDocument Message;  
        private static string XmlFileLocation;  
        private static string ResponseDoc;  
        public static XmlDocument XMLMessageCreator()  
        {  
            XmlFileLocation = "C:\\TestLocation\\CreateMessage";  
            try  
            {  
                ResponseDoc = (Directory.GetFiles(XmlFileLocation, "*.xml", SearchOption.TopDirectoryOnly))[0];  
            }  
            catch (Exception ex)  
            {  
                Console.WriteLine("Trying to get XML from: " + XmlFileLocation);  
                Console.WriteLine("EXCEPTION: " + ex.ToString());  
                throw ex;  
            }  
            //Create Message From XML  
            Message = new XmlDocument();  
            Message.PreserveWhitespace = true;  
            Message.Load(ResponseDoc);  
            return Message;  
        }   
    }  
}  

Para que el extracto de código anterior pueda generar un mensaje de solicitud, debe tener un mensaje de solicitud XML (para la operación Select en la tabla Employee) en la ubicación especificada para la XmlFileLocation variable.

Nota

Después de compilar el proyecto, SampleMessageCreator.dll se creará en el directorio del proyecto. Debe agregar este archivo DLL a la caché global de ensamblados (GAC). Además, debe agregar el SampleMessageCreator.dll como referencia en el proyecto de BizTalk.

Agregue la siguiente expresión para invocar este código desde la forma Asignación de mensajes y para establecer la acción para el mensaje. Para agregar una expresión, haga doble clic en la forma Asignación de mensajes para abrir el Editor de expresiones.

Select = SampleMessageCreator.SampleMessageCreator.XMLMessageCreator();  
Select(WCF.Action) = "TableOp/Select/dbo/Employee";  

Adición de puertos

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
SaveMessagePort - Establecer identificador en SaveMessagePort

- Establecer tipo en SaveMessagePortType

- Establecer el patrón de comunicación en unidireccional

- Establecer la dirección de comunicación en enviar

- Crear una operación Notificar. Esta operación se usa para los mensajes de notificación.

- Crear una operación Seleccionar. Esta operación se usa para seleccionar mensajes de respuesta.
SQLOutboundPort - Establecer el identificador en SQLOutboundPort

- Establecer tipo en SQLOutboundPortType

- Establecer el patrón de comunicación en Solicitud-respuesta

- Establecer la dirección de comunicación en Enviar y recibir

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
SaveNotification - Establecer mensaje en NotifyReceive

- Establecer operación en SaveMessagePort.Notify.Request
SendSelectMessage - Establecer mensaje en Seleccionar

- Establecer la operación en SQLOutboundPort.Select.Request
ReceiveSelectResponse - Establecer mensaje en SelectResponse

- Establecer la operación en SQLOutboundPort.Select.Response
SaveSelectResponse - Establecer mensaje en SelectResponse

- Establecer operación en SaveMessagePort.Select.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 un puerto de envío físico WCF-Custom o WCF-SQL para enviar mensajes a la base de datos de SQL Server. También debe especificar la acción en el puerto de envío.

    • Defina una ubicación en el disco duro y un puerto de archivo correspondiente donde la orquestación de BizTalk quitará los mensajes de la base de datos de SQL Server. Estos serán los mensajes de notificación recibidos de SQL Server y mensajes de la operación Seleccionar y actualizar que realice a través del puerto de envío de WCF-Custom o WCF-SQL.

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.

  • El puerto de envío WCF-Custom o WCF-SQL para realizar las operaciones Seleccionar y actualizar en la tabla Employee se está ejecutando.

  • El puerto de envío FILE, que recibe mensajes de SQL Server, se está ejecutando.

  • La orquestación de BizTalk para la operación se está ejecutando.

Ejecución de la operación

Para ejecutar esta operación, debe insertar un registro en la tabla Employee. Supongamos que inserta un registro con los siguientes detalles:

Name = John Smith  
Designation = Manager  
Salary = 100000  

Además, asegúrese de que el mensaje XML para realizar las operaciones Seleccionar y Actualizar está disponible en C:\TestLocation\MessageIn. El archivo XML debe ser similar al siguiente:

<Select xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">  
  <Columns>Employee_ID,Name,Status</Columns>  
  <Query>where Status=0;UPDATE Employee SET Status=1 WHERE Status=0</Query>  
</Select>  

Una vez insertado el registro, se realiza el siguiente conjunto de acciones, en la misma secuencia:

  • El adaptador recibe 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>  
    

    Este mensaje notifica que se insertó un registro en la tabla Employee. Tenga en cuenta que el valor del <Info> elemento es "Insert".

  • El adaptador ejecuta la operación Select. Dado que el XML de la operación Select también incluye una instrucción Update, también se ejecuta la instrucción Update. La siguiente respuesta de SQL Server es para la instrucción Select.

    <?xml version="1.0" encoding="utf-8" ?>   
    <SelectResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">  
      <SelectResult>  
        <Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">  
          <Employee_ID>10006</Employee_ID>   
          <Name>John</Name>   
          <Status>0</Status>  
        </Employee>  
      </SelectResult>  
    </SelectResponse>  
    

    Esta respuesta muestra que se insertó un registro en la tabla Employee y el estado de ese registro es 0.

  • Como parte de la instrucción Select, la instrucción Update también se ejecuta y la columna Estado del nuevo registro se cambia a 1. De nuevo, se desencadena otra notificación de SQL Server y el adaptador recibe un mensaje de notificación correspondiente, 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>  
    

    Este mensaje notifica que se actualizó un registro en la tabla Employee. Tenga en cuenta que el valor del <Info> elemento es "Update".

  • Después de la segunda notificación, el adaptador ejecuta la instrucción Select. Sin embargo, dado que no hay registros ahora que tienen Estado como 0, el adaptador obtiene una respuesta vacía similar a la siguiente.

    <?xml version="1.0" encoding="utf-8" ?>   
    <SelectResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">  
      <SelectResult />   
    </SelectResponse>  
    

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 de SQL.

Consulte también

Recepción de notificaciones de consulta SQL mediante BizTalk Server