Partager via


Résoudre les problèmes opérationnels liés à l’adaptateur SQL

Cette section décrit l’utilisation de techniques de résolution des problèmes pour résoudre les erreurs opérationnelles que vous pouvez rencontrer lors de l’utilisation de l’adaptateur Microsoft BizTalk pour SQL Server.

Activation du traçage

Vous devez activer le suivi entre l’adaptateur, le Kit de développement logiciel (SDK) de l’adaptateur MÉTIER WCF et SQL Server pour collecter plus d’informations sur les problèmes que vous rencontrez lors de l’utilisation de l’adaptateur SQL. Pour plus d’informations sur la prise en charge du suivi dans l’adaptateur SQL, consultez Suivi de diagnostic et Journalisation des messages dans l’adaptateur SQL.

Problèmes connus

Voici les erreurs les plus courantes que vous pouvez rencontrer lors de l’utilisation de l’adaptateur SQL, ainsi que leur cause et leur résolution probables.

Erreur lors du chargement des liaisons d’adaptateur

Problème

Lorsque vous essayez de démarrer le plug-in Visual Studio add adapter service reference ou le complément de projet BizTalk service de l’adaptateur, vous obtenez l’erreur suivante :

There was an error loading the binding, <binding name>, from your system configuration.  
ConfigurationErrorsException: Exception has been thrown by the target of an invocation.  

Cause

Lorsque vous essayez de démarrer le plug-in Add Adapter Service Reference ou Le complément Consume Adapter Service, WCF charge les liaisons d’adaptateur pour toutes les cartes installées. À leur tour, les liaisons d’adaptateur dépendent du logiciel client spécifique pour l’application d’entreprise. Vous pouvez rencontrer ce problème si vous avez effectué une installation standard ou complète de l’adaptateur, qui installe tous les adaptateurs contenus dans le pack d’adaptateurs BizTalk. Toutefois, les bibliothèques clientes métier peuvent être installées pour une seule application d’entreprise. Par conséquent, l’interface graphique utilisateur ne parvient pas à charger les liaisons pour les autres adaptateurs.

Résolution :

Veillez à effectuer une installation personnalisée des adaptateurs pour installer uniquement l’adaptateur dont vous avez besoin.

L’adaptateur SQL ne s’affiche pas dans la liste des cartes dans BizTalk Server console Administration

Problème

Contrairement à la version antérieure des adaptateurs fournis avec BizTalk Server, l’adaptateur SQL fourni avec bizTalk Adapter Pack n’apparaît pas dans la liste des adaptateurs dans la console d’administration BizTalk Server.

Cause

La dernière carte SQL est une liaison personnalisée WCF. Ainsi, bien que la console Administration BizTalk Server affiche l’adaptateur WCF-Custom, elle n’affiche pas les liaisons personnalisées WCF et, par conséquent, n’affiche pas l’adaptateur SQL basé sur WCF.

Résolution :

Vous pouvez ajouter explicitement l’adaptateur SQL à la console d’administration BizTalk Server en suivant les étapes mentionnées dans Ajout de l’adaptateur SQL à BizTalk Server console d’administration.

Erreur lors de l’exécution d’opérations sur une base de données SQL Server

Problème

L’adaptateur génère l’erreur suivante lors de l’exécution d’une opération sur une base de données SQL Server à l’aide de BizTalk Server.

  • Pour BizTalk Server

    System.ArgumentNullException: Value cannot be null.  
    

    Cause

    L’action WCF pour le message n’est pas spécifiée. WCF nécessite qu’une action SOAP soit spécifiée pour chaque opération, ce qui informe l’adaptateur de l’opération à effectuer sur l’application métier.

    Résolution :

    Spécifiez l’action SOAP dans le port d’envoi ou en tant que propriété de contexte de message dans une orchestration BizTalk. Pour obtenir des instructions, consultez Configurer l’action SOAP pour l’adaptateur SQL. Consultez Messages et schémas de message pour afficher la liste des actions pour chaque opération.

InvalidOperationException avec ErrorCode=5 lors de l’exécution d’opérations FILESTREAM

Problème

Vous obtenez l’erreur suivante lors de l’utilisation de l’adaptateur SQL pour effectuer des opérations FILESTREAM.

System.InvalidOperationException: OpenSqlFileStream returned error.  
ErrorCode:5  
  

Cause

Vous avez peut-être spécifié des informations d’identification de base de données pour vous connecter à la base de données SQL Server. Pour effectuer des opérations FILESTREAM, vous devez toujours utiliser l’authentification Windows. Le code d’erreur « 5 » indique que l’accès est refusé en raison d’informations d’identification incorrectes. Pour plus d’informations sur les différents codes d’erreur, consultez Codes d’erreur système (0-499).

Résolution :

Utilisez l’authentification Windows pour vous connecter à la base de données SQL Server. Dans BizTalk Server console Administration, vous pouvez le faire en laissant les champs nom d’utilisateur et mot de passe vides dans la boîte de dialogue WCF-Custom ou configuration du port WCF-SQL.

L’opération d’interrogation ne retourne aucun message même si des instructions valides sont spécifiées pour PollingStatement et PolledDataAvailableStatement

Problème

Même si des valeurs valides sont spécifiées pour les propriétés de liaison PollingStatement et PolledDataAvailableStatement, l’adaptateur ne reçoit pas de message d’interrogation de SQL Server.

Cause

Vérifiez si une autre transaction a été verrouillée sur la table que l’adaptateur interroge.

Résolution :

Si vous souhaitez interroger une table en cours de mise à jour dans le cadre d’une autre transaction, vous pouvez envisager d’utiliser le paramètre « with (nolock) » dans le cadre de la requête spécifiée pour la propriété de liaison PolledDataAvailableStatement pour vous assurer que les données sont retournées même si un verrou est imposé par l’autre transaction. Pour plus d’informations, consultez Verrouillage SQL dans le moteur de base de données.

L’adaptateur ne parvient pas à insérer, mettre à jour ou supprimer de grands volumes de données en une seule opération à l’aide de BizTalk Server

Problème

L’adaptateur SQL ne parvient pas à insérer, mettre à jour ou supprimer de grands volumes de données en une seule opération à l’aide de BizTalk Server.

Cause

L’insertion, la mise à jour ou la suppression de grands volumes de données peuvent prendre du temps et l’adaptateur SQL ou la transaction dans laquelle l’opération est effectuée peut expirer.

Résolution :

  • Pour BizTalk Server

    1. Spécifiez le délai d’expiration de l’adaptateur WCF dans le machine.config. Accédez au fichier machine.config sous <lecteur> système:\WINDOWS\Microsoft.NET\Framework\<version>\CONFIG et ajoutez l’extrait qui ressemble à ce qui suit.

      <configuration>  
       <system.transactions>  
        <machineSettings maxTimeout="02:00:00" />  
       </system.transactions>  
      </configuration>  
      

      Avec ce paramètre, le délai d’expiration de l’adaptateur WCF est défini sur 2 heures.

    2. Spécifiez les paramètres de délai d’expiration pour les transactions MSDTC dans le machine.config. Accédez au fichier machine.config sous <lecteur> système:\WINDOWS\Microsoft.NET\Framework\<version>\CONFIG et ajoutez l’extrait qui ressemble à ce qui suit.

      <system.transactions>   
              <defaultSettings distributedTransactionManagerName="<computer_name>" timeout="02:00:00"/>   
          </system.transactions>  
      
      

      Avec ce paramètre, le délai d’expiration MSDTC est défini sur 2 heures. La valeur par défaut du délai d’expiration MSDTC est de 10 minutes.

      Important

      Vous devez effectuer cette modification sur les ordinateurs exécutant le client de l’adaptateur et SQL Server. Dans l’extrait, remplacez <computer_name> par le nom de l’ordinateur exécutant le client de l’adaptateur et SQL Server.

    3. Définissez la propriété de liaison SendTimeout pour l’adaptateur SQL sur une valeur assez élevée. Pour obtenir des instructions sur la définition des propriétés de liaison, consultez Configurer les propriétés de liaison pour l’adaptateur SQL.

La validation complète du schéma dans BizTalk Server échoue pour les messages de réponse contenant DataSet

Problème

Pour les opérations qui retournent un message de réponse contenant un DataSet, par exemple ExecuteReader, la validation complète du schéma échoue dans BizTalk Server.

Résolution :

Nous vous recommandons de ne pas effectuer de validation de schéma complet pour les messages de réponse contenant un jeu de données. Au lieu de cela, vous pouvez procéder comme suit :

  1. Exécutez l’opération une fois qui retourne le message de réponse avec le schéma.

  2. Copiez le schéma du message de réponse dans un fichier .xsd et ajoutez ce fichier à votre projet BizTalk.

  3. Utilisez une requête xpath dans votre orchestration pour extraire les données du message de réponse.

Erreur avec RootNode TypeName dans les projets BizTalk

Problème

Dans un projet BizTalk dans Visual Studio, si les schémas générés à partir du complément Consume Adapter Service contiennent des caractères ou des mots réservés non valides pour la propriété RootNode TypeName , l’erreur suivante se produit lors de la compilation du projet :

Node <node reference> - Specify a valid .NET type name for this root node.  
The current .NET type name of this root node is invalid (it is a reserved BizTalk Keyword or is an invalid C# identifier).  

Résolution :

  1. Cliquez avec le bouton droit sur le nœud jubé référencé dans l’erreur, puis sélectionnez Propriétés.

  2. Pour la propriété TypeName RootNode , supprimez les caractères non autorisés ou les mots réservés, par exemple point (.).

L’adaptateur ne parvient pas à générer les métadonnées d’une procédure stockée fortement typée avec des tables temporaires

Problème

L’adaptateur ne parvient pas à générer de métadonnées pour les procédures stockées fortement typées qui incluent des tables temporaires dans leur définition. L’adaptateur donne l’exception suivante.

Microsoft.ServiceModel.Channels.Common.MetadataException:  
Retrieval of Operation Metadata has failed while building WSDL at 'TypedProcedure/<schema>/<stored_procedure_name>' --->  
System.Data.SqlClient.SqlException: Invalid object name '<temp_table_name>'.  
  

Résolution :

L’adaptateur SQL ne prend pas en charge la génération de métadonnées pour les procédures stockées fortement typées qui contiennent des tables temporaires dans leur définition. Au lieu de cela, vous devez générer des métadonnées pour la même procédure à partir du nœud Procédures lors de l’utilisation du plug-in Add Adapter Service Reference Plug-in ou Consume Adapter Service Add.

Avertissement de liaison non valide lors de l’utilisation de l’adaptateur dans Visual Studio

Problème

Lorsque vous utilisez l’adaptateur pour créer une application dans Visual Studio et que vous ouvrez le fichier de configuration (app.config) généré par l’adaptateur, un avertissement similaire au suivant s’affiche :

The element 'bindings' has invalid child element 'sqlBinding'. List of possible elements expected: 'basicHttpBinding, customBinding, ...  

Cause

Cet avertissement s’affiche car la liaison de l’adaptateur SQL, sqlBinding, n’est pas une liaison standard fournie avec Windows Communication Foundation (WCF).

Résolution :

Vous pouvez ignorer cet avertissement sans problème.

BizTalk Server lève une exception si vous utilisez plusieurs schémas de notification dans la même application ou si vous utilisez le schéma de notification sur plusieurs applications sur le même hôte

Problème

BizTalk Server lève une exception XLANG ou une exception indiquant que l’application ne peut pas localiser la spécification du document, car plusieurs schémas correspondent au type de message.

Cause

Cela se produit en raison de l’une des raisons suivantes :

  • Vous avez généré plusieurs schémas de notification dans un projet BizTalk Server, vous l’avez déployé sur une application BizTalk Server, puis exécuté l’application pour recevoir des notifications de la base de données SQL Server. Étant donné que les schémas de notification sont courants, il existe un conflit entre les schémas déployés dans l’application BizTalk Server.

  • Dans le cas de plusieurs projets, vous avez généré un schéma de notification pour chacun des projets BizTalk Server, déployé chaque projet sur une application BizTalk Server distincte sur le même hôte, puis exécuté une ou plusieurs applications pour recevoir des notifications de la base de données SQL Server. Étant donné que les schémas et les assemblys sont accessibles dans toutes les applications dans BizTalk Server, il existe un conflit entre les schémas communs déployés sous différents BizTalk Server applications et assemblys.

    Résolution :

    Utilisez un fichier de schéma de notification unique pour une application BizTalk Server. Si vous devez utiliser le schéma de notification dans plusieurs applications BizTalk Server sur le même hôte, créez une application contenant un schéma de notification unique, puis utilisez le schéma de notification de toutes les autres applications dans BizTalk Server.

Le client d’adaptateur lève une exception lors de l’exécution d’une opération après la restauration de la connectivité entre le client de l’adaptateur et la base de données SQL Server

Problème

Le client d’adaptateur lève l’exception suivante lors de l’exécution d’une opération sur la base de données SQL Server :

{System.Data.Common.DbException} = {"A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"}  

Cause

Pendant l’exécution d’une opération, l’adaptateur utilise la connexion à partir du pool de connexions SQL ADO.NET pour se connecter à la base de données SQL Server et effectuer l’opération. En cas de brève panne réseau entre le client de l’adaptateur et la base de données SQL Server ou si la base de données SQL Server est temporairement arrêtée, toutes les connexions dans le pool de connexions SQL ADO.NET ne sont plus valides. Une fois la connectivité restaurée et que vous essayez d’effectuer une opération sur la base de données SQL Server, l’adaptateur utilise les mêmes connexions non valides à partir du pool de connexions SQL ADO.NET, et par conséquent, le client de l’adaptateur lève l’exception.

Résolution :

Le client d’adaptateur doit implémenter une logique de nouvelle tentative dans son exécution d’opération, où il doit intercepter l’exception et spécifier le nombre de nouvelles tentatives d’opération comme « n+1 », où « n » est la valeur spécifiée pour la propriété de liaison MaxConnectionPoolSize. Cela implique que s’il existe un nombre « n » de connexions dans le pool de connexions qui ont été rendues non valides, en théorie, le client de l’adaptateur doit réessayer pendant un maximum de « n+1 » pour obtenir une connexion valide, et donc effectuer l’opération.

Par exemple, pour spécifier le nombre de nouvelles tentatives dans BizTalk Server, ouvrez la boîte de dialogue Propriétés d’un port d’envoi dans une application, cliquez sur Options avancées de transport dans le volet gauche de la boîte de dialogue et, dans la zone Options de transport, spécifiez une valeur dans la liste Nombre de nouvelles tentatives.

L’utilisation de la mémoire et le nombre de threads augmentent lors de l’utilisation de l’adaptateur dans une opération entrante transactionnée

Problème

Dans une opération entrante transactionnée, telle que l’interrogation, si aucune donnée n’est disponible dans la table en cours d’interrogation et que l’adaptateur continue à interroger, vous constatez une augmentation de l’utilisation de la mémoire et du nombre de threads sur une période donnée.

Cause

Si aucune donnée n’est disponible dans la table en cours d’interrogation, après chaque cycle de délai d’expiration de réception, Windows Communication Foundation (WCF) génère un nouveau thread pour poursuivre l’opération d’interrogation. Par conséquent, le nombre de threads et l’utilisation de la mémoire augmentent sur une période donnée. Toutefois, si la table interrogée contient des données, le même thread continue d’effectuer tous les sondages suivants.

Résolution :

Nous vous recommandons de définir ReceiveTimeout sur la valeur maximale possible, qui est 24.20:31:23.64700000 (24 jours) afin qu’un nouveau thread ne soit généré que tous les 24 jours. Cela garantit que l’utilisation de la mémoire et le nombre de threads ne augmentent pas trop tôt.

Notes

Si SqlAdapterInboundTransactionBehavior a été défini, assurez-vous que TransactionTimeout est également configuré pour la valeur maximale possible, qui est 24.20:31:23.6470000 (24 jours). Lorsque vous utilisez cette solution de contournement, nous pouvons ajouter SqlAdapterInboundTransactionBehavior uniquement si le niveau d’isolation de transaction doit être configuré. Sinon, il est recommandé de supprimer ce comportement.

Pour plus d’informations sur la propriété de liaison ReceiveTimeout, consultez En savoir plus sur l’adaptateur BizTalk pour SQL Server propriétés de liaison de l’adaptateur. Pour obtenir des instructions sur la spécification des propriétés de liaison, consultez Configurer les propriétés de liaison pour l’adaptateur SQL.

Notes

Lorsque vous utilisez l’adaptateur avec BizTalk Server, définir le délai d’expiration sur une valeur importante n’a pas d’impact sur les fonctionnalités de l’adaptateur.

Voir aussi

Résoudre les problèmes liés à l’adaptateur SQL