次の方法で共有


Oracle Database WS-Metadata Exchange を使用してメタデータを取得する

Windows Communication Foundation (WCF) カスタム バインドとして、Microsoft BizTalk Adapter for Oracle Database は、Microsoft BizTalk Adapter for Oracle Database から特定の操作のメタデータを取得するために使用できる WS-Metadata Exchange (MEX) エンドポイントを公開します。

WCF には、サービスに関するメタデータのエクスポート、発行、取得、インポートのための豊富なインフラストラクチャが用意されています。 アダプターなどの WCF サービスは、メタデータを使用してサービス エンドポイントと対話する方法を記述し、svcutil.exe などのツールがサービスを使用するためのクライアント コードを自動的に生成できるようにします。 WCF は、サービスのメタデータを MetadataSet 型のインスタンスとして表します。これは、WS-Metadata Exchange (MEX) で定義されているメタデータシリアル化形式に強く関連付けられています。 MetadataExchangeClient を使用して、アダプターに対する対象の操作用の MetadataSet を作成できます。

メタデータ交換に対する WCF のサポートは、このドキュメントの範囲を超える広範なトピックです。 WCF でのメタデータのサポートの詳細については、「 メタデータ」を参照してください。 WCF がメタデータ用に公開するアーキテクチャ、クラス、名前空間の特に適切な説明については、「 メタデータ アーキテクチャの概要」を参照してください。 先に進む前に、これらの WCF トピックの WCF サービスからのメタデータの取得に関連するコンテンツについて理解しておく必要があります。

次のトピックでは、 MetadataExchangeClient を使用して Oracle Database アダプターからメタデータを取得する方法について説明します。

MetadataExchangeClient を使用したメタデータの取得

MetadataExchangeClient を使用するには、接続 URI とバインド (OracleDBBinding) を指定する必要があります。 接続 URI は、メタデータを取得する操作を識別します。

次のセクションでは、接続 URI を指定する方法、重要なバインド プロパティ、および MetadataExchangeClient を使用してアダプターからメタデータを取得する方法について説明します。

接続 URI

MetadataExchangeClient を使用するには、MEX エンドポイントと、メタデータを取得する操作を指定する Oracle 接続 URI を指定する必要があります。 MEX エンドポイントとターゲット操作は、次の方法で接続 URI で指定します。

  • クエリ文字列に "wsdl" パラメーターを含める必要があります。 クエリ文字列の最初のパラメーターである場合は、疑問符 (?) の直後に指定されます。 最初のパラメーターでない場合は、アンパサンド (&) で前に置く必要があります。

  • "wsdl" パラメーターの後に 1 つ以上の "op" パラメーターを指定する必要があります。 各 "op" パラメーターの前にはアンパサンド (&) が付き、ターゲット操作のメッセージ アクション (ノード ID) を指定します。

    たとえば、次の接続 URI は、SCOTT の挿入操作と削除操作を対象とします。EMP テーブル。 "wsdl" パラメーターと "op" パラメーターが強調表示されています。

"oracledb://ADAPTER?wsdl&op=http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Insert&op=http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Delete"  

注意

POLLINGSTMT 操作用に生成された名前空間を変更する場合は、クエリ文字列に PollingId パラメーターを指定する必要があります。

この接続 URI を MetadataExchangeClient に渡す方法は、クライアントの作成とアダプターからのメタデータの取得に使用するオーバーロードされたメソッドによって異なります。

Oracle 接続 URI の詳細については、「 Oracle データベース接続 URI の作成」を参照してください。

バインドのプロパティ

MetadataExchangeClient を作成するときは、OracleDBBinding を指定する必要があります。

アダプターがメタデータを生成する方法に影響を与えるバインディング プロパティがいくつかあります。 それらのプロパティは以下のとおりです。

  • EnableSafeTyping

  • UseSchemaInNamespace

  • PollingStatement

重要

POLLINGSTMT 操作のメタデータを取得する場合は、 PollingStatement バインド プロパティを設定する必要があります。

MetadataExchangeClientGetMetadata メソッドを呼び出す前に、これらのバインド プロパティがアプリケーションに必要な値に設定されていることを確認する必要があります。 Oracle Database アダプターのバインド プロパティの詳細については、「Oracle Database アダプターのバインド プロパティの読み取り」を参照してください。

次の例では、 MetadataExchangeClient を使用して、SCOTT に対する挿入、更新、削除、および Select 操作のサービス記述 (WSDL ドキュメント) を作成します。EMP テーブル。 WSDL は EmpOperations.wsdl ファイルに保存されます。

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Collections.ObjectModel;  
  
// Needed for WCF and Oracle Adapter  
using System.ServiceModel;  
using Microsoft.ServiceModel.Channels;  
using Microsoft.Adapters.OracleDB;  
  
// Needced for MetadataExchangeClient class  
using System.ServiceModel.Description;  
// Needed for ServiceDescription class  
using System.Web.Services;  
  
namespace OracleMetadataExchange  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            //create a binding  
            OracleDBBinding binding = new OracleDBBinding();  
  
            //create a metadata exchange client that will retrieve metadata according to the WS-MEX standard  
            MetadataExchangeClient client = new MetadataExchangeClient(binding);  
            client.SoapCredentials.UserName.UserName = "SCOTT";  
            client.SoapCredentials.UserName.Password = "TIGER";  
  
            //set up an endpoint address and specifies the operations for which we want metadata  
            string connectionUri = "oracledb://ADAPTER?wsdl"  
                + "&op="  
                + "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Insert"  
                + "&op="  
                + "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Update"  
                + "&op="  
                + "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Delete"  
                + "&op="  
                + "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Select";  
  
            EndpointAddress address = new EndpointAddress(connectionUri);  
  
            //get the metadata  
            MetadataSet ms = client.GetMetadata(address);  
  
            // Check for the metadata set size   
            Collection<MetadataSection> documentCollection = ms.MetadataSections;  
            if (documentCollection != null && documentCollection.Count > 0)  
            {  
                //get the wsdl from the metadata set  
                System.Web.Services.Description.ServiceDescription wsdl = (System.Web.Services.Description.ServiceDescription)documentCollection[0].Metadata;  
  
                //save the wsdl to a file  
                wsdl.Write("EmpOperations.wsdl");  
  
            }  
  
        }  
    }  
}  

参照

Oracle データベースからプログラムでメタデータを取得する