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 Database 接続 URI の作成」を参照してください。
結合プロパティ
MetadataExchangeClient を作成するときは、OracleDBBinding を指定する必要があります。
アダプターによるメタデータの生成方法に影響を与えるバインディング プロパティがいくつかあります。 これらのプロパティは次のとおりです。
EnableSafeTyping
UseSchemaInNamespace
PollingStatement
Von Bedeutung
POLLINGSTMT 操作のメタデータを取得する場合は、 PollingStatement バインディング プロパティを設定する必要があります。
MetadataExchangeClient で GetMetadata メソッドを呼び出す前に、これらのバインド プロパティがアプリケーションに必要な値に設定されていることを確認する必要があります。 Oracle データベース アダプターのバインド プロパティの詳細については、「Oracle Database アダプターのバインド プロパティの読み取り」を参照してください。
例
次の例では、MetadataExchangeClientを使用して、SCOTT.EMPテーブルに対する挿入、更新、削除、選択の操作のサービス記述書 (WSDL ドキュメント) を作成します。 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");
}
}
}
}