Oracle Database を使用してチャネルを作成する
WCF チャネル モデルでは、Oracle データベースに対する操作を呼び出し、WCF チャネル経由で Microsoft BizTalk Adapter for Oracle Database と SOAP メッセージを交換することで、ポーリング クエリの結果を受け取ります。
操作 (送信操作) を呼び出すには、 IRequestChannel または IOutputChannel を使用してアダプターにメッセージを送信します。
ポーリング ベースのデータ変更メッセージを受信するには、 IInputChannel 経由で POLLINGSTMT メッセージを受信します。
このセクションのトピックでは、受信および送信操作に使用されるチャネル図形を作成および構成する方法について説明します。
送信 (クライアント) チャネルの作成
IRequestChannel または IOutputChannel を使用して、Oracle データベースに対する操作を呼び出すことができます。 どちらの場合も、最初に適切なインターフェイスを使用して System.ServiceModel.ChannelFactory を作成します。 次に、ファクトリを使用してチャネルを作成します。 チャネルを作成したら、それを使用してアダプターに対する操作を呼び出すことができます。
送信チャネルを作成して開くには
エンドポイントとバインドを使用して、目的のチャネル図形の ChannelFactory のインスタンスを作成して初期化します。 エンドポイントは Oracle 接続 URI を指定し、バインドは OracleDBBinding のインスタンスです。
Credentials プロパティを使用して、チャネル ファクトリの Oracle 資格情報を指定します。
チャネル ファクトリを開きます。
チャネル ファクトリで CreateChannel メソッドを呼び出して、チャネルのインスタンスを取得します。
チャネルを開きます。
コードまたは構成からバインディングとエンドポイント アドレスを指定できます。
コードでのバインディングアドレスとエンドポイントアドレスの指定
次のコード例は、コードでバインドとエンドポイント アドレスを指定して IRequestChannel を作成する方法を示しています。 IOutputChannel を作成するコードは同じですが、ChannelFactory とチャネルの種類に IOutputChannel インターフェイスを指定する必要があります。
// Create binding -- set binding properties before you open the factory.
OracleDBBinding odbBinding = new OracleDBBinding();
// Create address.
EndpointAddress odbAddress = new EndpointAddress("oracledb://ADAPTER/");
// Create channel factory from binding and address.
ChannelFactory<IRequestChannel> factory =
new ChannelFactory<IRequestChannel>(odbBinding, odbAddress);
// Specify credentials.
factory.Credentials.UserName.UserName = "SCOTT";
factory.Credentials.UserName.Password = "TIGER";
// Open factory
factory.Open();
// Get channel and open it
IRequestChannel channel = factory.CreateChannel();
channel.Open();
構成でのバインディングとエンドポイント アドレスの指定
次のコード例は、構成で指定されたクライアント エンドポイントからチャネル ファクトリを作成する方法を示しています。
// Create channel factory from configuration.
ChannelFactory<IRequestChannel> factory =
new ChannelFactory<IRequestChannel>("MyRequestChannel");
// Specify credentials.
factory.Credentials.UserName.UserName = "SCOTT";
factory.Credentials.UserName.Password = "TIGER";
// Open the factory.
factory.Open();
// Get a channel and open it.
IRequestChannel channel = factory.CreateChannel();
channel.Open();
構成設定
次のコードは、前の例で使用した構成設定を示しています。 クライアント エンドポイントのコントラクトは、作成するチャネル図形の種類に応じて、"System.ServiceModel.Channels.IRequestChannel" または "System.ServiceModel.Channels.IRequestChannel" である必要があります。
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.serviceModel>
<bindings>
<oracleDBBinding>
<binding name="OracleDBBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" metadataPooling="true"
statementCachePurge="false" statementCacheSize="10" pollingInterval="500"
useOracleConnectionPool="true" minPoolSize="1" maxPoolSize="100"
incrPoolSize="5" decrPoolSize="1" connectionLifetime="0" acceptCredentialsInUri="false"
useAmbientTransaction="true" polledDataAvailableStatement="SELECT 1 FROM DUAL"
pollWhileDataFound="false" notifyOnListenerStart="true" notificationPort="-1"
inboundOperationType="Polling" dataFetchSize="65536" longDatatypeColumnSize="0"
skipNilNodes="true" maxOutputAssociativeArrayElements="32"
enableSafeTyping="false" insertBatchSize="1" useSchemaInNameSpace="true"
enableBizTalkCompatibilityMode="false" enablePerformanceCounters="false" />
</oracleDBBinding>
</bindings>
<client>
<endpoint address="oracledb://adapter/" binding="oracleDBBinding"
bindingConfiguration="OracleDBBinding" contract="System.ServiceModel.Channels.IRequestChannel"
name="MyRequestChannel" />
</client>
</system.serviceModel>
</configuration>
受信 (サービス) チャネルの作成
OracleDBBinding のインスタンスにバインド プロパティを設定することで、Oracle データベース のテーブルとビューをポーリングするように Oracle Database アダプターを構成します。 次に、このバインディングを使用してチャネル リスナーを作成します。このリスナーから、アダプターからの受信操作のメッセージを受信する IInputChannel チャネルを取得できます。
受信操作のメッセージを受信する IInputChannel を作成して開くには
OracleDBBinding のインスタンスを作成します。
受信操作に必要なバインド プロパティを設定します。 たとえば、POLLINGSTMT 操作の場合、Oracle データベースをポーリングするように Oracle データベース アダプターを構成するには、少なくとも InboundOperationType、 PollingStatement、および PollingInterval バインド プロパティを設定する必要があります。
BindingParameterCollection クラスを使用してバインド パラメーター コレクションを作成し、資格情報を設定します。
OracleDBBinding で BuildChannelListener<IInputChannel メソッドを呼び出して、>チャネル リスナーを作成します。 Oracle 接続 URI は、このメソッドのパラメーターの 1 つとして指定します。 Oracle 接続 URI の詳細については、「 Oracle データベース接続 URI の作成」を参照してください。
リスナーを開きます。
リスナーで AcceptChannel メソッドを呼び出して、IInputChannel チャネルを取得します。
チャネルを開きます。
次のコードは、POLLINGSTMT 操作を使用して、チャネル リスナーを作成し、アダプターから受信メッセージへの IInputChannel を取得する方法を示しています。
Note
Oracle Database アダプターでは、一方向の受信のみがサポートされます。 そのため、IInputChannel を使用して、Oracle データベースからの受信操作のメッセージを受信する必要があります。
// Create a binding: specify the InboundOperationType, PollingInterval (in seconds), the PollingStatement, and
// the PostPollStatement.
OracleDBBinding binding = new OracleDBBinding();
binding.InboundOperationType = InboundOperation.Polling;
binding.PollingInterval = 30;
binding.PollingStatement = "SELECT * FROM ACCOUNTACTIVITY FOR UPDATE";
binding.PostPollStatement = "BEGIN ACCOUNT_PKG.PROCESS_ACTIVITY(); END;";
// Create a binding parameter collection and set the credentials
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = "SCOTT";
credentials.UserName.Password = "TIGER";
BindingParameterCollection bindingParams = new BindingParameterCollection();
bindingParams.Add(credentials);
// Get a listener from the binding and open it.
Uri connectionUri = new Uri("oracleDB://ADAPTER");
IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>(connectionUri, bindingParams);
listener.Open();
// Get a channel from the listener and open it.
channel = listener.AcceptChannel();
channel.Open();