Recevoir des notifications de requête de manière incrémentielle à partir de SQL à l’aide de BizTalk Server
Important
Par souci de concision, cette rubrique décrit uniquement comment recevoir des notifications de manière incrémentielle. Dans les scénarios métier, l’orchestration doit idéalement inclure la logique pour extraire le type de message de notification reçu, puis effectuer les opérations suivantes. En d’autres termes, l’orchestration décrite dans cette rubrique doit être basée sur l’orchestration décrite dans Traiter les messages de notification pour effectuer des tâches spécifiques dans SQL à l’aide de BizTalk Server.
Cette rubrique montre comment configurer l’adaptateur SQL pour recevoir des messages de notification de requête incrémentielle à partir d’une base de données SQL Server. Pour illustrer les notifications incrémentielles, envisagez une table, Employee, avec une colonne « État ». Lorsqu’un nouvel enregistrement est inséré dans cette table, la valeur de la colonne État est définie sur 0. Vous pouvez configurer l’adaptateur pour recevoir des notifications incrémentielles en procédant comme suit :
Inscrivez-vous aux notifications à l’aide d’une instruction SQL qui récupère tous les enregistrements dont la colonne État est 0. Pour ce faire, spécifiez l’instruction SQL pour la propriété de liaison NotificationStatement .
Pour les lignes pour lesquelles des messages de notification ont été reçus, mettez à jour la colonne État sur 1.
Cette rubrique montre comment créer une orchestration BizTalk et configurer une application BizTalk pour y parvenir.
Configuration des notifications avec les propriétés de liaison de l’adaptateur SQL
Le tableau suivant récapitule les propriétés de liaison de l’adaptateur SQL que vous utilisez pour configurer la réception de notifications à partir de SQL Server. Vous devez spécifier ces propriétés de liaison lors de la configuration du port de réception dans la console Administration BizTalk Server.
Notes
Vous pouvez choisir de spécifier ces propriétés de liaison lors de la génération du schéma pour l’opération notification , même si ce n’est pas obligatoire. Dans ce cas, le fichier de liaison de port généré par le complément Consume Adapter Service dans le cadre de la génération de métadonnées contient également les valeurs que vous spécifiez pour les propriétés de liaison. Vous pouvez importer ultérieurement ce fichier de liaison dans la console d’administration BizTalk Server pour créer le port de réception WCF-custom ou WCF-SQL avec les propriétés de liaison déjà définies. Pour plus d’informations sur la création d’un port à l’aide du fichier de liaison, consultez Configurer une liaison de port physique à l’aide d’un fichier de liaison de port pour utiliser l’adaptateur SQL.
Binding, propriété | Description |
---|---|
InboundOperationType | Spécifie l’opération entrante que vous souhaitez effectuer. Pour recevoir des messages de notification, définissez-le sur Notification. |
NotificationStatement | Spécifie l’instruction SQL (procédure> stockée SELECT ou EXEC<) utilisée pour l’inscription aux notifications de requête. L’adaptateur reçoit un message de notification de SQL Server uniquement lorsque le jeu de résultats de l’instruction SQL spécifiée change. |
NotifyOnListenerStart | Spécifie si l’adaptateur envoie une notification aux clients de l’adaptateur lorsque l’écouteur est démarré. |
Pour obtenir une description plus complète de ces propriétés, consultez En savoir plus sur les propriétés de liaison de l’adaptateur BizTalk pour SQL Server. Pour obtenir une description complète de l’utilisation de l’adaptateur SQL pour recevoir des notifications de SQL Server, lisez plus loin.
Comment cette rubrique illustre la réception de messages de notification
Pour montrer comment l’adaptateur SQL prend en charge la réception de messages de notification de SQL Server, cette rubrique montre comment configurer l’adaptateur pour recevoir des notifications pour les modifications apportées à une table Employee. Supposons que la table Employee comporte des colonnes Employee_ID, Nom et État. Chaque fois qu’un nouvel employé est ajouté, la valeur de la colonne État est définie sur 0.
Pour illustrer la réception des notifications, procédez comme suit :
Générez le schéma pour la notification (opération entrante) et Sélectionnez (opération sortante) sur la table Employee.
Créez une orchestration avec les éléments suivants :
Emplacement de réception pour recevoir des messages de notification. Vous pouvez configurer pour la notification en spécifiant l’instruction SELECT comme suit :
SELECT Employee_ID, Name FROM dbo.Employee WHERE Status=0
Notes
Vous devez spécifier spécifiquement les noms de colonnes dans l’instruction, comme indiqué dans cette instruction SELECT. En outre, vous devez toujours spécifier le nom de la table ainsi que le nom du schéma. Par exemple :
dbo.Employee
.Port d’envoi pour mettre à jour les lignes pour lesquelles une notification a déjà été envoyée. Pour ce faire, définissez la valeur dans la colonne État sur 1. Vous pouvez effectuer cette opération dans le cadre de l’opération Sélectionner en envoyant le message suivant à l’adaptateur.
<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>
Dans ce message, dans le cadre de l’élément
<Query>
, vous spécifiez l’instruction UPDATE pour mettre à jour la colonne État. Notez que cette opération doit être exécutée après la réception des messages de notification afin que les lignes traitées soient mises à jour. Pour supprimer la surcharge liée à l’attente d’obtenir la réponse de notification, puis à la suppression manuelle d’un message de demande pour mettre à jour les lignes, vous allez générer le message de demande pour la mise à jour des lignes au sein de l’orchestration elle-même. Vous pouvez le faire à l’aide de la forme Construire un message au sein d’une orchestration.
Comment recevoir des messages de notification à partir de la base de données SQL Server
L’exécution d’une opération sur la base de données SQL Server à l’aide de l’adaptateur SQL avec BizTalk Server implique les tâches procédurales décrites dans Blocs de construction pour développer des applications BizTalk avec l’adaptateur SQL. Pour configurer l’adaptateur pour recevoir des messages de notification, ces tâches sont les suivantes :
Créez un projet BizTalk, puis générez le schéma pour notification (opération entrante) et Sélectionner (opération sortante) sur la table Employee. Si vous le souhaitez, vous pouvez spécifier des valeurs pour les propriétés de liaison InboundOperationType et NotificationStatement .
Créez un message dans le projet BizTalk pour recevoir une notification à partir de la base de données SQL Server.
Créez des messages dans le projet BizTalk pour effectuer l’opération Sélectionner des informations sur la base de données SQL Server et recevoir des messages de réponse.
Créez une orchestration qui effectue les opérations suivantes :
Reçoit un message de notification de SQL Server.
Crée un message pour sélectionner et mettre à jour les lignes pour lesquelles une notification est reçue.
Envoie ce message au SQL Server pour mettre à jour les lignes et reçoit une réponse.
Générez et déployez le projet BizTalk.
Configurez l’application BizTalk en créant des ports d’envoi et de réception physiques.
Notes
Pour les opérations entrantes, comme la réception de messages de notification, vous devez uniquement configurer un port de réception unidirectionnel WCF-Custom ou WCF-SQL. Les ports de réception bidirectionnel WCF-Custom ou WCF-SQL ne sont pas pris en charge pour les opérations entrantes.
Démarrez l’application BizTalk.
Cette rubrique fournit des instructions pour effectuer ces tâches.
Exemple basé sur cette rubrique
Un exemple, IncrementalNotification, basé sur cette rubrique, est fourni avec le pack d’adaptateurs BizTalk. Pour plus d’informations, consultez Exemples pour l’adaptateur SQL.
Génération d’un schéma
Vous devez générer le schéma pour l’opération notification et l’opération Sélectionner sur la table Employee. Pour plus d’informations sur la génération du schéma, consultez Obtenir des métadonnées pour les opérations de SQL Server dans Visual Studio à l’aide de l’adaptateur SQL. Effectuez les tâches suivantes lors de la génération du schéma. Ignorez la première étape si vous ne souhaitez pas spécifier les propriétés de liaison au moment de la conception.
Spécifiez une valeur pour les propriétés de liaison InboundOperationType et NotificationStatement lors de la génération du schéma. Pour plus d’informations sur cette propriété de liaison, consultez En savoir plus sur les propriétés de liaison de l’adaptateur BizTalk pour SQL Server. Pour obtenir des instructions sur la façon de spécifier des propriétés de liaison, consultez Configurer les propriétés de liaison pour l’adaptateur SQL.
Sélectionnez le type de contrat service (opérations entrantes).
Générez le schéma pour l’opération notification .
Sélectionnez le type de contrat client (opérations sortantes).
Générez le schéma pour l’opération Sélectionner sur la table Employee .
Définition des messages et des types de messages
Le schéma que vous avez généré précédemment décrit les « types » requis pour les messages dans l’orchestration. Un message est généralement une variable, dont le type est défini par le schéma correspondant. Une fois le schéma généré, vous devez le lier aux messages de la vue Orchestration du projet BizTalk.
Pour cette rubrique, vous devez créer trois messages : un pour recevoir des notifications de la base de données SQL Server, un pour effectuer l’opération Select et un pour recevoir la réponse pour l’opération Select.
Effectuez les étapes suivantes pour créer des messages et les lier au schéma.
Pour créer des messages et créer un lien vers le schéma
Ajoutez une orchestration au projet BizTalk. Dans le Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet BizTalk, pointez sur Ajouter, puis cliquez sur Nouvel élément. Tapez un nom pour l’orchestration BizTalk, puis cliquez sur Ajouter.
Ouvrez la fenêtre d’affichage d’orchestration du projet BizTalk, s’il n’est pas déjà ouvert. Cliquez sur Affichage, pointez sur Autres fenêtres, puis cliquez sur Vue d’orchestration.
Dans la vue Orchestration, cliquez avec le bouton droit sur Messages, puis cliquez sur Nouveau message.
Cliquez avec le bouton droit sur le message nouvellement créé, puis sélectionnez Fenêtre Propriétés.
Dans le volet Propriétés de Message_1, procédez comme suit :
Propriété Pour Identificateur Tapez NotifyReceive
.Type de message Dans la liste déroulante, développez Schémas, puis sélectionnez SQLNotify.Notification, où SQLNotify est le nom de votre projet BizTalk. Notification est le schéma généré pour l’opération de notification . Répétez l’étape 3 pour créer deux nouveaux messages. Dans le volet Propriétés du nouveau message, procédez comme suit :
Définissez Identificateur sur Définissez Type de message sur Sélectionnez SQLNotify.TableOperation_dbo_Employee.Select, où TableOperation_dbo_Employee est le schéma généré pour l’opération Select SélectionnerResponse SQLNotify.TableOperation_dbo_Employee.SelectResponse
Configuration de l’orchestration
Vous devez créer une orchestration BizTalk pour utiliser BizTalk Server pour recevoir des messages de notification de la base de données SQL Server, puis mettre à jour les lignes pour lesquelles la notification a été reçue. Dans cette orchestration, l’adaptateur reçoit le message de notification basé sur l’instruction SELECT spécifiée pour la propriété de liaison NotificationStatement . Le message de notification est reçu à un emplacement FILE. Une fois la réponse reçue, l’orchestration construit un message qui sera utilisé pour mettre à jour les lignes pour lesquelles la notification est reçue. La réponse de ce message est également reçue au même emplacement FILE.
Par conséquent, votre orchestration doit contenir les éléments suivants :
Port de réception unidirectionnel pour recevoir des messages de notification.
Port d’envoi bidirectionnel permettant d’envoyer des messages afin de mettre à jour les lignes et de recevoir une réponse pour le même.
Forme De construction de message pour construire des messages, afin d’exécuter l’opération De mise à jour, dans l’orchestration.
Un port d’envoi FILE pour enregistrer la réponse pour l’opération de mise à jour.
Recevoir et envoyer des formes.
Un exemple d’orchestration ressemble à ce qui suit.
Ajout de formes de message
Veillez à spécifier les propriétés suivantes pour chacune des formes de message. Les noms répertoriés dans la colonne Forme sont les noms des formes de message affichées dans l’orchestration qui vient d’être mentionnée.
Forme | Type de forme | Propriétés |
---|---|---|
ReceiveNotification | Recevoir | - Définissez Nom sur ReceiveNotification - Définissez Activer sur True |
SaveNotification | Envoyer | - Définissez Nom sur SaveNotification |
SendSelectMessage | Envoyer | - Définissez Nom sur SendSelectMessage |
ReceiveSelectResponse | Recevoir | - Définissez Nom sur ReceiveSelectResponse |
SaveSelectResponse | Envoyer | - Définissez Nom sur SaveSelectResponse |
Ajout d’une forme de message de construction
Vous pouvez utiliser la forme Construire un message pour générer un message de demande dans l’opération afin d’effectuer l’opération Sélectionner. Pour ce faire, vous devez ajouter une forme Construire un message et une forme d’affectation de message à votre orchestration. Pour cet exemple, la forme Affectation de message appelle le code qui génère un message envoyé à SQL Server pour effectuer l’opération Select. La forme Affectation de message définit également l’action du message à envoyer à SQL Server.
Pour la forme de message de construction, définissez la propriété Message Construit surSelect.
Le code permettant de générer la réponse peut faire partie de la même solution Visual Studio que votre projet BizTalk. Un exemple de code pour générer un message de réponse ressemble à ceci.
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;
}
}
}
Pour que l’extrait de code précédent puisse générer un message de demande, vous devez disposer d’un message de requête XML (pour l’opération Sélectionner sur la table Employee) à l’emplacement spécifié pour la XmlFileLocation
variable.
Notes
Une fois le projet généré, SampleMessageCreator.dll sont créés dans le répertoire du projet. Vous devez ajouter cette DLL au Global Assembly Cache (GAC). En outre, vous devez ajouter le SampleMessageCreator.dll en tant que référence dans le projet BizTalk.
Ajoutez l’expression suivante pour appeler ce code à partir de la forme Affectation de message et définir l’action pour le message. Pour ajouter une expression, double-cliquez sur la forme Affectation de message pour ouvrir l’Éditeur d’expressions.
Select = SampleMessageCreator.SampleMessageCreator.XMLMessageCreator();
Select(WCF.Action) = "TableOp/Select/dbo/Employee";
Ajout de ports
Veillez à spécifier les propriétés suivantes pour chacun des ports logiques. Les noms répertoriés dans la colonne Port sont les noms des ports affichés dans l’orchestration.
Port | Propriétés |
---|---|
SQLNotifyPort | - Définissez Identificateur sur SQLNotifyPort - Définissez Type sur SQLNotifyPortType - Définir le modèle de communication sur Unidirectionnel - Définir le sens de la communication sur Réception |
SaveMessagePort | - Définissez Identifier sur SaveMessagePort - Définissez Type sur SaveMessagePortType - Définir le modèle de communication sur Unidirectionnel - Définir le sens de la communication sur Envoyer - Créer une opération Notifier. Cette opération est utilisée pour les messages de notification. - Créer une opération Sélectionner. Cette opération est utilisée pour les messages de réponse sélectionnés. |
SQLOutboundPort | - Définissez Identificateur sur SQLOutboundPort - Définissez Type sur SQLOutboundPortType - Définir le modèle de communication sur Requête-réponse - Définir le sens de la communication sur Envoyer-Recevoir |
Spécifier des messages pour les formes d’action et se connecter aux ports
Le tableau suivant spécifie les propriétés et leurs valeurs que vous devez définir pour spécifier des messages pour les formes d’action et lier les messages aux ports. Les noms répertoriés dans la colonne Forme sont les noms des formes de message affichées dans l’orchestration mentionnée précédemment.
Forme | Propriétés |
---|---|
ReceiveNotification | - Définissez Message sur NotifyReceive - Définissez Opération sur SQLNotifyPort.Notify.Request |
SaveNotification | - Définissez Message sur NotifyReceive - Définissez Opération sur SaveMessagePort.Notify.Request |
SendSelectMessage | - Définissez Message sur Sélectionner - Définissez Opération sur SQLOutboundPort.Select.Request |
ReceiveSelectResponse | - Définissez Message sur SelectResponse - Définissez Opération sur SQLOutboundPort.Select.Response |
SaveSelectResponse | - Définissez Message sur SelectResponse - Définissez Opération sur SaveMessagePort.Select.Request |
Une fois que vous avez spécifié ces propriétés, les formes et les ports de message sont connectés et votre orchestration est terminée.
Vous devez maintenant générer la solution BizTalk et la déployer sur un BizTalk Server. Pour plus d’informations, consultez Génération et exécution d’orchestrations.
Configuration de l’application BizTalk
Une fois que vous avez déployé le projet BizTalk, l’orchestration que vous avez créée précédemment est répertoriée sous le volet Orchestrations de la console d’administration BizTalk Server. Vous devez utiliser la console d’administration BizTalk Server pour configurer l’application. Pour obtenir une procédure pas à pas, consultez Procédure pas à pas : déploiement d’une application BizTalk de base.
La configuration d’une application implique :
Sélection d’un hôte pour l’application.
Mappage des ports que vous avez créés dans votre orchestration à des ports physiques dans la console d’administration BizTalk Server. Pour cette orchestration, vous devez :
Définissez un port de réception unidirectionnel de WCF-Custom physique ou WCF-SQL. Ce port écoute les notifications provenant de la base de données SQL Server. Pour plus d’informations sur la création de ports, consultez Configurer manuellement une liaison de port physique à l’adaptateur SQL. Veillez à spécifier les propriétés de liaison suivantes pour le port de réception.
Important
Vous n’avez pas besoin d’effectuer cette étape si vous avez spécifié les propriétés de liaison au moment du design. Dans ce cas, vous pouvez créer un port de réception WCF-custom ou WCF-SQL, avec les propriétés de liaison requises définies, en important le fichier de liaison créé par le complément Consume Adapter Service. Pour plus d’informations, consultez Configurer une liaison de port physique à l’aide d’un fichier de liaison de port pour utiliser l’adaptateur SQL.
Binding, propriété Valeur InboundOperationType Définissez cette valeur sur Notification. NotificationStatement Définissez cette valeur sur :
SELECT Employee_ID, Name FROM dbo.Employee WHERE Status=0
Note: Vous devez spécifier spécifiquement les noms de colonnes dans l’instruction, comme indiqué dans cette instruction SELECT. En outre, vous devez toujours spécifier le nom de la table ainsi que le nom du schéma. Par exemple :dbo.Employee
.NotifyOnListenerStart Définissez cette valeur sur True. Pour plus d’informations sur les différentes propriétés de liaison, consultez En savoir plus sur l’adaptateur BizTalk pour SQL Server propriétés de liaison de l’adaptateur.
Notes
Nous vous recommandons de configurer le niveau d’isolation des transactions et le délai d’expiration de la transaction lors de l’exécution d’opérations entrantes à l’aide de l’adaptateur SQL. Vous pouvez le faire en ajoutant le comportement du service lors de la configuration du port de réception WCF-Custom ou WCF-SQL. Pour obtenir des instructions sur l’ajout du comportement du service, consultez Configurer le niveau d’isolation des transactions et le délai d’expiration des transactions avec SQL.
Définissez un WCF-Custom physique ou un port d’envoi WCF-SQL pour envoyer des messages à la base de données SQL Server. Vous devez également spécifier l’action dans le port d’envoi.
Définissez un emplacement sur le disque dur et un port de fichier correspondant où l’orchestration BizTalk supprimera les messages de la base de données SQL Server. Il s’agit des messages de notification reçus de SQL Server et des messages pour l’opération Sélectionner et mettre à jour que vous effectuez via le port d’envoi WCF-Custom ou WCF-SQL.
Démarrage de l’application
Vous devez démarrer l’application BizTalk pour recevoir des messages de notification à partir de la base de données SQL Server et pour effectuer les opérations de sélection et de mise à jour suivantes. Pour obtenir des instructions sur le démarrage d’une application BizTalk, consultez Guide pratique pour démarrer une orchestration.
À ce stade, assurez-vous que :
La WCF-Custom ou le port de réception unidirectionnel WCF-SQL, qui reçoit les messages de notification de la base de données SQL Server est en cours d’exécution.
Le port d’envoi WCF-Custom ou WCF-SQL pour effectuer des opérations de sélection et de mise à jour sur la table Employee est en cours d’exécution.
Le port d’envoi FILE, qui reçoit les messages de SQL Server, est en cours d’exécution.
L’orchestration BizTalk pour l’opération est en cours d’exécution.
Exécution de l’opération
Pour exécuter cette opération, vous devez insérer un enregistrement dans la table Employee. Supposons que vous insériez un enregistrement avec les détails suivants :
Name = John Smith
Designation = Manager
Salary = 100000
Vérifiez également que le message XML permettant d’effectuer les opérations De sélection et de mise à jour est disponible dans C :\TestLocation\MessageIn. Le fichier XML doit ressembler à ce qui suit :
<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>
Une fois l’enregistrement inséré, l’ensemble d’actions suivant a lieu, dans la même séquence :
L’adaptateur reçoit un message de notification semblable à ce qui suit :
<?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>
Ce message signale qu’un enregistrement a été inséré dans la table Employee. Notez que la valeur de l’élément
<Info>
est « Insert ».L’adaptateur exécute l’opération Sélectionner. Étant donné que le code XML de l’opération Select inclut également une instruction Update, l’instruction Update est également exécutée. La réponse suivante de SQL Server concerne l’instruction 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>
Cette réponse indique qu’un enregistrement a été inséré dans la table Employee et que l’état de cet enregistrement est 0.
Dans le cadre de l’instruction Select, l’instruction Update est également exécutée et la colonne État du nouvel enregistrement est remplacée par 1. Cette opération déclenche à nouveau une autre notification de SQL Server et l’adaptateur reçoit un message de notification correspondant, qui ressemble à ce qui suit :
<?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>
Ce message informe qu’un enregistrement a été mis à jour dans la table Employee. Notez que la valeur de l’élément
<Info>
est « Update ».Après la deuxième notification, l’adaptateur exécute l’instruction Select. Toutefois, étant donné qu’aucun enregistrement n’a maintenant l’état 0, l’adaptateur obtient une réponse vide semblable à ce qui suit.
<?xml version="1.0" encoding="utf-8" ?> <SelectResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee"> <SelectResult /> </SelectResponse>
Bonnes pratiques
Une fois que vous avez déployé et configuré le projet BizTalk, vous pouvez exporter les paramètres de configuration vers un fichier XML appelé fichier de liaison. Une fois que vous avez généré un fichier de liaison, vous pouvez importer les paramètres de configuration à partir du fichier, de sorte que vous n’avez pas besoin de créer les ports d’envoi et de réception pour la même orchestration. Pour plus d’informations sur les fichiers de liaison, consultez Réutiliser les liaisons d’adaptateur SQL.
Voir aussi
Recevoir des notifications de requête SQL à l’aide de BizTalk Server