Partage via


Obtenir des métadonnées dans Oracle Database à l’aide d’IMetadataRetrievalContract

L’adaptateur Microsoft BizTalk pour Oracle Database expose un point de terminaison IMetadataRetrievalContractque vous pouvez utiliser pour parcourir et rechercher des artefacts de base de données Oracle et pour récupérer des métadonnées pour les opérations sous la forme d’un document WSDL (Web Services Description Language).

L’interface IMetadataRetrievalContract est implémentée par le Kit de développement logiciel (SDK) De l’adaptateur métier (LOB) Microsoft Windows Communication Foundation (WCF) et fournit des fonctionnalités de navigation, de recherche et de récupération des métadonnées. En plus de l’interface IMetadataRetrievalContract , le Kit de développement logiciel (SDK) de l’adaptateur LOB WCF expose la classe MetadataRetrievalClient , qui implémente l’interface. Vous pouvez utiliser un canal IMetadataRetrievalContract ou metadataRetrievalClient pour utiliser des métadonnées ; les méthodes exposées pour parcourir, rechercher et récupérer les métadonnées sont les mêmes dans chaque cas.

Les sections suivantes fournissent des informations sur l’utilisation de l’interface IMetadataRetrievalContract .

The IMetadataRetrievalContract Interface

Le tableau suivant fournit des informations sur les classes importantes utilisées lorsque vous utilisez l’interface IMetadataRetrievalContract .

Classe ou interface Description
Interface IMetadataRetrievalContract

(Microsoft.ServiceModel.Channels)
Définit les méthodes Browse, Search et GetMetadata . Vous appelez ces méthodes à l’aide d’un canal IMetadataRetrievalContract ou d’un MetadataRetrievalClient pour utiliser les métadonnées de l’adaptateur.
MetadataRetrievalClient , classe

(Microsoft.ServiceModel.Channels)
Implémente l’interface IMetadataRetrievalContract . Vous pouvez créer une instance de cette classe et la configurer pour votre base de données Oracle en fournissant un OracleDBBinding et une EndpointAddress. Vous pouvez ensuite appeler ses méthodes pour travailler avec des métadonnées.
MetadataRetrievalNode, classe

(Microsoft.ServiceModel.Channels)
Représente un nœud de métadonnées sur l’adaptateur. Les méthodes Browse et Search retournent des nœuds de ce type, et la méthode GetMetadata prend les nœuds de ce type en tant que paramètre.
Classe ServiceDescription

(System.Web.Services.Description)
Fournit un moyen de créer et de mettre en forme un fichier de document WSDL valide. La méthode GetMetadata retourne un objet ServiceDescription .

ID des nœuds de métadonnées

L’adaptateur organise ses métadonnées sous la forme d’une arborescence hiérarchique de nœuds. Dans cette arborescence, il existe deux types de nœuds de métadonnées :

  • Les nœuds d’opération représentent les opérations que l’adaptateur surface sur les artefacts de base de données Oracle. Les nœuds d’opération sont les feuilles de l’arborescence.

  • Les nœuds de catégorie représentent les artefacts de base de données Oracle et les regroupements d’artefacts de base de données Oracle qui ne correspondent pas directement à une opération sur la carte. Les nœuds de catégorie sont les branches de l’arborescence ; ils contiennent d’autres nœuds de catégorie et/ou des nœuds d’opération. Par exemple, les tables et packages Oracle sont représentés en tant que nœuds de catégorie.

    Chaque nœud de métadonnées mis en évidence par l’adaptateur est identifié par un ID de nœud unique. Pour plus d’informations sur les ID de nœud de métadonnées exposés par l’adaptateur, consultez ID de nœud de métadonnées. Vous utilisez ces ID de nœud pour spécifier des artefacts de base de données Oracle cibles lorsque vous utilisez l’interface IMetadataRetrievalContract pour parcourir, rechercher et récupérer des métadonnées.

Propriétés de liaison

Que vous utilisiez un canal IMetadataRetrievalContract ou un IMetadataRetrievalClient pour utiliser des métadonnées, vous devez spécifier un oracleDBBinding lorsque vous créez le instance.

Plusieurs propriétés de liaison affectent la façon dont l’adaptateur génère des métadonnées. Ces propriétés sont :

  • EnableSafeTyping

  • UseSchemaInNamespace

  • PollingStatement

Important

Si vous souhaitez récupérer des métadonnées pour l’opération POLLINGSTMT, vous devez définir la propriété de liaison PollingStatement .

Vous devez vous assurer que ces propriétés de liaison sont définies sur les valeurs requises pour votre application avant d’ouvrir l’objet de récupération des métadonnées. Pour plus d’informations sur les propriétés de liaison de l’adaptateur Oracle Database, consultez En savoir plus sur les propriétés de liaison de l’adaptateur Oracle Database.

Nœuds de métadonnées de navigation

Vous utilisez la méthode Browse pour retourner tous les nœuds de métadonnées contenus dans un nœud parent. L’exemple suivant recherche les trois premiers schémas sur la base de données Oracle. Dans cet exemple, le client est un instance de MetadataRetrievalClient.

// The first parameter is the node ID.   
// The second parameter is the start index.  
// The third parameter is the maximum number of nodes to return.  
                MetadataRetrievalNode[] nodes = client.Browse(MetadataRetrievalNode.Root.NodeId, 0, 3);  

Important

Vous pouvez uniquement parcourir les nœuds de catégorie ; vous ne pouvez pas parcourir les nœuds d’opération.

Recherche de nœuds de métadonnées

Vous utilisez la méthode Search pour effectuer une recherche de nœuds contenus par un nœud parent. L’adaptateur prend en charge les caractères génériques dans les expressions de recherche ; par exemple, vous pouvez spécifier le pourcentage (%) caractère générique correspondant à zéro ou plusieurs caractères. L’exemple suivant montre une recherche pour toutes les tables du schéma SCOTT qui contiennent la chaîne « EMP ». Dans cet exemple, le client est un instance de MetadataRetrievalClient.

// Search for all nodes that contain "EMP" under the SCOTT.Table node.  
// The parameters are the parent node ID, the search expression, and   
// the maximum number of nodes to return.  
IMetadataRetrievalNode[] nodes = client.Search("http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table", "%EMP%", 3);  
  

Important

La recherche n’est prise en charge que sur un ensemble limité de nœuds. Pour plus d’informations sur les nœuds sur lesquels la recherche est prise en charge et sur les caractères génériques pris en charge dans les expressions de recherche, consultez ID de nœud de métadonnées.

Récupération des métadonnées (WSDL) pour les opérations

Vous utilisez la méthode GetMetadata pour récupérer une description de service (document WSDL) pour un groupe de nœuds d’opération. L’exemple suivant récupère une description de service qui contient toutes les opérations que l’adaptateur surface pour le SCOTT. Table EMP en spécifiant son ID de nœud. Dans cet exemple, le client est un instance de MetadataRetrievalClient.

// Get a service description that contains all of the operations   
// surfaced for the SCOTT.EMP table. The IsOperation  
// property is set false because this is a category node.  
nodes = new MetadataRetrievalNode[1];  
nodes[0] = new MetadataRetrievalNode();  
nodes[0].NodeId = "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP";  
nodes[0].IsOperation = false;  
System.Web.Services.Description.ServiceDescription description = client.GetMetadata(nodes);  
  

Important

La propriété IsOperation doit être false pour les nœuds de catégorie et true pour les nœuds d’opération.

Utilisation d’un MetadataRetrievalClient

La création et l’utilisation d’un MetadataRetrievalClient sont pratiquement les mêmes que n’importe quel autre client WCF. Vous créez le client en spécifiant un point de terminaison et un instance d’OracleDBBinding. Vous pouvez effectuer cette opération de manière déclarative dans la configuration ou impérativement dans votre code. Vous appelez ensuite les méthodes de MetadataRetrievalClient pour parcourir, rechercher et récupérer les métadonnées de l’adaptateur.

L’exemple suivant montre comment utiliser un MetadataRetrievalClient pour parcourir, rechercher et récupérer des métadonnées à partir de l’adaptateur Oracle Database. L’exemple illustre :

  • Navigation dans le nœud racine de l’arborescence de métadonnées pour les schémas Oracle Database.

  • Recherche des tables dans le schéma SCOTT avec des noms qui contiennent la chaîne « EMP ».

  • Récupération des métadonnées pour toutes les opérations prises en charge pour scott. Table EMP en passant un nœud de catégorie à la méthode GetMetadata .

  • Récupération des métadonnées pour l’opération POLLINGSTMT en passant le nœud d’opération POLLINGSTMT à la méthode GetMetadata .

using System;  
using System.Collections.Generic;  
using System.Text;  
  
using System.ServiceModel;  
using Microsoft.Adapters.OracleDB;  
using Microsoft.ServiceModel.Channels;  
  
using System.Web.Services.Description;  
  
namespace OracleMetadataRetrieval  
{  
    class NodeWriter  
    {  
        // This method writes the value of a collection of metadata retrieval nodes  
        // to the console  
        public void Write(string title, MetadataRetrievalNode[] nodes)  
        {  
            Console.WriteLine(title);  
            Console.WriteLine();  
  
            //write all the nodes returned to the console.  
            foreach (MetadataRetrievalNode node in nodes)  
            {  
                Console.WriteLine("NodeId = " + node.NodeId);  
                Console.WriteLine("\tDirection   = " + node.Direction.ToString());  
                Console.WriteLine("\tIsOperation = " + node.IsOperation.ToString());  
                Console.WriteLine("\tDisplayName = " + node.DisplayName);  
                Console.WriteLine("\tDescription = " + node.Description);  
            }  
            Console.WriteLine();  
        }  
    }  
  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            MetadataRetrievalClient client = null;  
            NodeWriter nodeWriter = new NodeWriter();  
  
            try  
            {  
                // create a binding and   
                // set the PollingStatement binding property if you want to  
                // return metadata for the POLLINGSTMT operation  
                OracleDBBinding binding = new OracleDBBinding();  
                binding.PollingStatement = "SELECT * FROM EMP";  
  
                // Set PollingId parameter if you want to alter the namespace of the POLLINGSTMT operation  
                EndpointAddress address = new EndpointAddress("oracledb://ADAPTER?PollingId=1");  
  
                client = new MetadataRetrievalClient(binding, address);  
                client.ClientCredentials.UserName.UserName = "SCOTT";  
                client.ClientCredentials.UserName.Password = "TIGER";  
                client.Open();  
  
                // Browse for the first 3 (schema) nodes directly under the root  
                // The parameters are the parent Node ID, the start index, and the maximum number  
                // of nodes to return  
                MetadataRetrievalNode[] nodes = client.Browse(MetadataRetrievalNode.Root.NodeId, 0, 3);  
                nodeWriter.Write("Browse results for the root node:", nodes);  
  
                // Search for first 3 tables that contain "EMP" in the SCOTT schema  
                // The parameters are the parent node ID, the search expression, and the maximum number  
                // of nodes to return  
                nodes = client.Search("http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table", "%EMP%", 3);  
                nodeWriter.Write(String.Format("Search results for \"%EMP%\" under {0} node:", "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table"), nodes);  
  
                // Get a WSDL document that specifies a contract that contains the operations  
                // surfaced for the SCOTT.EMP table. The IsOperation property is set false  
                // because this is a category node.  
                nodes = new MetadataRetrievalNode[1];  
                nodes[0] = new MetadataRetrievalNode();  
                nodes[0].NodeId = "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP";  
                nodes[0].IsOperation = false;  
                System.Web.Services.Description.ServiceDescription description = client.GetMetadata(nodes);  
                description.Write("EmpTableContract.wsdl");  
  
                // Get a WSDL document that specifies a contract that contains the   
                // the POLLINGSTMT operation. The IsOperation property is set true  
                // because this is an operation node.  
                // Note that the operation NodeId is equivalent to the message action.  
                nodes = new MetadataRetrievalNode[1];  
                nodes[0] = new MetadataRetrievalNode();  
                nodes[0].NodeId = "http://Microsoft.LobServices.OracleDB/2007/03/POLLINGSTMT";  
                nodes[0].IsOperation = true;  
                description = client.GetMetadata(nodes);  
                description.Write("PollingContract.wsdl");  
  
            }  
            catch (Exception ex)  
            {  
                Console.WriteLine("Exception is: " + ex.Message);  
            }  
            finally  
            {  
                if (client != null)  
                {  
                    if (client.State == CommunicationState.Opened)  
                        client.Close();  
                    else  
                        client.Abort();  
                }  
            }  
        }  
    }  
}  

L’exemple suivant montre la sortie de ce programme sur la console. Vous pouvez voir la structure des nœuds de récupération de métadonnées retournés par chaque méthode. Le programme écrit également deux documents WSDL dans des fichiers.

Browse results for the root node:  
  
NodeId = http://Microsoft.LobServices.OracleDB/2007/03/ADAPTERTEST  
        Direction   = Outbound  
        IsOperation = False  
        DisplayName = ADAPTERTEST  
        Description = Owned By ADAPTERTEST  
NodeId = http://Microsoft.LobServices.OracleDB/2007/03/ADAPTEST  
        Direction   = Outbound  
        IsOperation = False  
        DisplayName = ADAPTEST  
        Description = Owned By ADAPTEST  
NodeId = http://Microsoft.LobServices.OracleDB/2007/03/ADMIN123  
        Direction   = Outbound  
        IsOperation = False  
        DisplayName = ADMIN123  
        Description = Owned By ADMIN123  
  
Search results for "%EMP%" under http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table node:  
  
NodeId = http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/AEMP  
        Direction   = Outbound  
        IsOperation = False  
        DisplayName = AEMP  
        Description = Table.AEMP  
NodeId = http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP  
        Direction   = Outbound  
        IsOperation = False  
        DisplayName = EMP  
        Description = Table.EMP  
NodeId = http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP1  
        Direction   = Outbound  
        IsOperation = False  
        DisplayName = EMP1  
        Description = Table.EMP1  

Utilisation d’un canal IMetadataRetrievalContract

Vous pouvez également créer un canal IMetadataRetrievalContract , puis utiliser ce canal pour parcourir, rechercher et récupérer des métadonnées à partir de l’adaptateur. (Les signatures de méthode sont les mêmes que pour la classe MetadataRetrievalClient .) L’exemple suivant montre comment procéder.

…  
//Create a binding and endpoint address.  
OracleDBBinding binding = new OracleDBBinding();  
EndpointAddress address = new EndpointAddress("oracledb://ADAPTER/");  
  
//Create and open a channel factory that will return an IMetadataRetrievalContract object, on which browse, search, and get can be performed.  
ChannelFactory<IMetadataRetrievalContract> factory = new ChannelFactory<IMetadataRetrievalContract>(binding, address);  
factory.Credentials.UserName.UserName = "SCOTT";  
factory.Credentials.UserName.Password = "TIGER";  
factory.Open();  
  
//Obtain an IMetadataRetrievalContract channel from the factory.  
IMetadataRetrievalContract channel = factory.CreateChannel();  
  
//Perform a search using the channel.  
MetadataRetrievalNode[] nodes = channel.Search("http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table", "%EMP%", int.MaxValue);  
…  

Voir aussi

Obtenir des métadonnées par programmation à partir de la base de données Oracle