使用 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 Database 配接器來輪詢 Oracle 資料庫資料表和檢視。 接著,您可以使用此系結來建置通道接聽程式,您可以從中取得 IInputChannel 通道來接收介面卡輸入作業的訊息。
建立並開啟 IInputChannel 以接收輸入作業的訊息
建立 OracleDBBinding的實例。
設定輸入作業所需的系結屬性。 例如,針對 POLLINGSTMT 作業,您至少必須設定 InboundOperationType、 PollingStatement和 PollingInterval 系結屬性,以設定 Oracle 資料庫配接器來輪詢 Oracle 資料庫。
使用 BindingParameterCollection 類別建立系結參數集合,並設定認證。
在OracleDBBinding上叫用BuildChannelListener < IInputChannel >方法,以建立通道接聽程式。 您可以將 Oracle 連線 URI 指定為這個方法的其中一個參數。 如需 Oracle 連線 URI 的詳細資訊,請參閱 建立 Oracle 資料庫連線 URI。
開啟接聽程式。
在接聽程式上叫用AcceptChannel方法,以取得IInputChannel通道。
開啟通道。
下列程式碼示範如何使用 POLLINGSTMT 作業,建立通道接聽程式,並從配接器取得 IInputChannel 至輸入訊息。
注意
Oracle 資料庫配接器僅支援單向接收。 因此,您必須使用 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();