Freigeben über


Abrufen von Metadaten in Oracle-Datenbank mithilfe von IMetadataRetrievalContract

Der Microsoft BizTalk-Adapter für Oracle-Datenbank macht einen IMetadataRetrievalContract-Endpunktverfügbar, mit dem Sie nach Oracle-Datenbankartefakten suchen und Metadaten für Vorgänge in Form eines WSDL-Dokuments (Web Services Description Language) abrufen können.

Die IMetadataRetrievalContract-Schnittstelle wird vom Lob-Adapter-SDK (Microsoft Windows Communication Foundation) (WCF) implementiert und bietet Funktionen zum Durchsuchen, Suchen und Abrufen von Metadaten. Zusätzlich zur IMetadataRetrievalContract-Schnittstelle macht das WCF LOB Adapter SDK die MetadataRetrievalClient-Klasse verfügbar, die die Schnittstelle implementiert. Sie können entweder einen IMetadataRetrievalContract-Kanal oder einen MetadataRetrievalClient verwenden, um mit Metadaten zu arbeiten. Die Methoden, die zum Durchsuchen, Suchen und Abrufen von Metadaten verfügbar gemacht werden, sind jeweils identisch.

Die folgenden Abschnitte enthalten Informationen zur Verwendung der IMetadataRetrievalContract-Schnittstelle .

Die IMetadataRetrievalContract-Schnittstelle

Die folgende Tabelle enthält Informationen zu wichtigen Klassen, die beim Arbeiten mit der IMetadataRetrievalContract-Schnittstelle verwendet werden.

Klasse oder Schnittstelle BESCHREIBUNG
IMetadataRetrievalContract-Schnittstelle

(Microsoft.ServiceModel.Channels)
Definiert die Methoden Browse, Search und GetMetadata . Sie rufen diese Methoden entweder mithilfe eines IMetadataRetrievalContract-Kanals oder eines MetadataRetrievalClients auf, um mit Adaptermetadaten zu arbeiten.
MetadataRetrievalClient-Klasse

(Microsoft.ServiceModel.Channels)
Implementiert die IMetadataRetrievalContract-Schnittstelle . Sie können eine instance dieser Klasse erstellen und für Ihre Oracle-Datenbank konfigurieren, indem Sie eine OracleDBBinding-Instanz und eine EndpointAddress bereitstellen. Anschließend können Sie die zugehörigen Methoden aufrufen, um mit Metadaten zu arbeiten.
MetadataRetrievalNode-Klasse

(Microsoft.ServiceModel.Channels)
Stellt einen Metadatenknoten auf dem Adapter dar. Die Browse- und Search-Methoden geben Knoten dieses Typs zurück, und die GetMetadata-Methode verwendet Knoten dieses Typs als Parameter.
ServiceDescription-Klasse

(System.Web.Services.Description)
Stellt eine Möglichkeit zum Erstellen und Formatieren einer gültigen WSDL-Dokumentdatei bereit. Die GetMetadata-Methode gibt ein ServiceDescription-Objekt zurück.

IDs von Metadatenknoten

Der Adapter organisiert seine Metadaten als hierarchische Struktur von Knoten. Innerhalb dieser Strukturstruktur gibt es zwei Arten von Metadatenknoten:

  • Vorgangsknoten stellen Vorgänge dar, die der Adapter in Oracle-Datenbankartefakten zeigt. Vorgangsknoten sind die Blätter der Struktur.

  • Kategorieknoten stellen Oracle-Datenbankartefakte und Gruppierungen von Oracle-Datenbankartefakten dar, die nicht direkt einem Vorgang auf dem Adapter entsprechen. Kategorieknoten sind die Verzweigungen der Struktur. sie enthalten andere Kategorieknoten und/oder Vorgangsknoten. Oracle-Tabellen und -Pakete werden beispielsweise als Kategorieknoten dargestellt.

    Jeder vom Adapter angezeigte Metadatenknoten wird durch eine eindeutige Knoten-ID identifiziert. Weitere Informationen zu den vom Adapter angezeigten Metadatenknoten-IDs finden Sie unter Metadatenknoten-IDs. Sie verwenden diese Knoten-IDs, um Oracle-Zieldatenbankartefakte anzugeben, wenn Sie die IMetadataRetrievalContract-Schnittstelle zum Durchsuchen, Suchen und Abrufen von Metadaten verwenden.

Bindungseigenschaften

Unabhängig davon, ob Sie einen IMetadataRetrievalContract-Kanal oder einen IMetadataRetrievalClient zum Arbeiten mit Metadaten verwenden, müssen Sie beim Erstellen des instance eine OracleDBBinding-Instanz angeben.

Es gibt mehrere Bindungseigenschaften, die sich darauf auswirken, wie der Adapter Metadaten generiert. Diese Eigenschaften sind:

  • EnableSafeTyping

  • UseSchemaInNamespace

  • PollingStatement

Wichtig

Wenn Sie Metadaten für den POLLINGSTMT-Vorgang abrufen möchten, müssen Sie die Eigenschaft PollingStatement-Bindung festlegen.

Sie sollten sicherstellen, dass diese Bindungseigenschaften auf die für Ihre Anwendung erforderlichen Werte festgelegt sind, bevor Sie das Metadatenabrufobjekt öffnen. Weitere Informationen zu den Bindungseigenschaften des Oracle Database-Adapters finden Sie unter Informationen zu den Bindungseigenschaften des Oracle Database-Adapters.

Durchsuchen von Metadatenknoten

Sie verwenden die Browse-Methode , um alle Metadatenknoten zurückzugeben, die in einem übergeordneten Knoten enthalten sind. Im folgenden Beispiel werden die ersten drei Schemas in der Oracle-Datenbank gesucht. In diesem Beispiel ist der Client ein instance von 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);  

Wichtig

Sie können nur Kategorieknoten durchsuchen. Sie können vorgangsknoten nicht durchsuchen.

Suchen nach Metadatenknoten

Sie verwenden die Search-Methode , um eine Suche nach Knoten durchzuführen, die in einem übergeordneten Knoten enthalten sind. Der Adapter unterstützt Feldhalterzeichen in Suchausdrücken. Beispielsweise können Sie das Feldzeichen prozent (%) angeben, um mit null oder mehr Zeichen übereinzupassen. Das folgende Beispiel zeigt eine Suche nach allen Tabellen im SCOTT-Schema, die die Zeichenfolge "EMP" enthalten. In diesem Beispiel ist der Client ein instance von 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);  
  

Wichtig

Die Suche wird nur für eine begrenzte Gruppe von Knoten unterstützt. Weitere Informationen zu den Knoten, auf denen die Suche unterstützt wird, und zu den in Suchausdrücken unterstützten Feldhalterzeichen finden Sie unter Metadatenknoten-IDs.

Abrufen von Metadaten (WSDL) für Vorgänge

Sie verwenden die GetMetadata-Methode , um eine Dienstbeschreibung (WSDL-Dokument) für eine Gruppe von Vorgangsknoten abzurufen. Im folgenden Beispiel wird eine Dienstbeschreibung abgerufen, die alle Vorgänge enthält, die der Adapter für scott darstellt. EMP-Tabelle durch Angabe der Knoten-ID. In diesem Beispiel ist der Client ein instance von 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);  
  

Wichtig

Die IsOperation-Eigenschaft sollte für Kategorieknoten false und true für Vorgangsknoten sein.

Verwenden eines MetadataRetrievalClient

Das Erstellen und Verwenden eines MetadataRetrievalClient ist mit jedem anderen WCF-Client identisch. Sie erstellen den Client, indem Sie einen Endpunkt und eine instance von OracleDBBinding angeben. Sie können dies entweder deklarativ in der Konfiguration oder imperativ in Ihrem Code tun. Anschließend rufen Sie die Methoden des MetadataRetrievalClient auf, um Metadaten aus dem Adapter zu durchsuchen, zu durchsuchen und abzurufen.

Das folgende Beispiel zeigt, wie Sie einen MetadataRetrievalClient zum Durchsuchen, Suchen und Abrufen von Metadaten aus dem Oracle Database-Adapter verwenden. Das Beispiel veranschaulicht Folgendes:

  • Durchsuchen des Stammknotens der Metadatenstruktur für Oracle Database-Schemas.

  • Suchen nach den Tabellen im SCOTT-Schema mit Namen, die die Zeichenfolge "EMP" enthalten.

  • Abrufen von Metadaten für alle Vorgänge, die für scott unterstützt werden. EMP-Tabelle durch Übergeben eines Kategorieknotens an die GetMetadata-Methode .

  • Abrufen von Metadaten für den POLLINGSTMT-Vorgang durch Übergeben des Vorgangsknotens POLLINGSTMT an die GetMetadata-Methode ..

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();  
                }  
            }  
        }  
    }  
}  

Im Folgenden wird die Ausgabe dieses Programms in der Konsole gezeigt. Sie können die Struktur der Metadatenabrufknoten sehen, die von jeder Methode zurückgegeben werden. Das Programm schreibt auch zwei WSDL-Dokumente in Dateien.

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  

Verwenden eines IMetadataRetrievalContract-Kanals

Sie können auch einen IMetadataRetrievalContract-Kanal erstellen und dann diesen Kanal zum Durchsuchen, Suchen und Abrufen von Metadaten aus dem Adapter verwenden. (Die Methodensignaturen sind identisch mit der MetadataRetrievalClient-Klasse .) Das folgende Beispiel zeigt, wie dies geschieht.

…  
//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);  
…  

Weitere Informationen

Programmgesteuertes Abrufen von Metadaten aus der Oracle-Datenbank