在 WCF 通道模型中,您會在 Oracle E-Business Suite 上叫用作業,並透過 WCF 通道與 Microsoft bizTalk Adapter for Oracle E-Business Suite 交換 SOAP 訊息,以接收結果。
您可以使用 IRequestChannel 或 IOutputChannel 來將訊息傳送至配接器來叫用作業(輸出作業)。
您會透過 IInputChannel 接收有關輸入作業的訊息。
本節中的主題提供如何建立及設定用於輸入和輸出作業的通道圖形的相關信息。
建立用戶端外部通道
您可以使用 IRequestChannel 或 IOutputChannel 來叫用 Oracle E-Business Suite 上的作業。 不論是哪一種情況,您都先使用適當的介面來建立 System.ServiceModel.ChannelFactory 。 然後,您可以使用工廠來創建通道。 建立通道後,您可以使用它來调用适配器上的操作。
建立和開啟輸出通道
使用端點和系結,建立及初始化所需通道圖形的 ChannelFactory 實例。 端點會指定 Oracle E-Business Suite 連線 URI,而系結是 OracleEBSBinding 的實例。
使用 Credentials 屬性,為通道處理站提供 Oracle E-Business Suite 認證。
開啟通道處理站。
在通道處理站上叫用 CreateChannel 方法,以取得通道的實例。
開啟通道。
您可以在程式代碼或組態中指定系結和端點位址。
在程式代碼中指定系結和端點位址
下列程式代碼範例示範如何在程式代碼中指定系結和端點位址,以建立 IRequestChannel 。 若要建立 IOutputChannel 的程式代碼相同,不同之處在於您必須為 ChannelFactory 和通道類型指定 IOutputChannel 介面。
// Create binding -- set binding properties before you open the factory.
OracleEBSBinding binding = new OracleEBSBinding();
// Create address
EndpointAddress address = new EndpointAddress("oracleebs://<oracleebs_instance_name>/");
// Create channel factory from binding and address.
ChannelFactory<IRequestChannel> factory =
new ChannelFactory<IRequestChannel>(binding, address);
// Specify credentials.
factory.Credentials.UserName.UserName = "myuser";
factory.Credentials.UserName.Password = "mypassword";
// 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 = "myuser";
factory.Credentials.UserName.Password = "mypassword";
// Open the factory.
factory.Open();
// Get a channel and open it.
IRequestChannel channel = factory.CreateChannel();
channel.Open();
組態設定
下列程式代碼顯示用於上述範例的組態設定。 用戶端端點的合約必須是 「System.ServiceModel.Channels.IRequestChannel」 或 “System.ServiceModel.Channels.IOutputChannel”,視您想要建立的通道圖形類型而定。
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.serviceModel>
<bindings>
<oracleEBSBinding>
<binding openTimeout="00:05:00" name="OracleEBSBinding" closeTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" clientCredentialType="Database"
inboundOperationType="Polling" metadataPooling="true" statementCachePurge="false"
statementCacheSize="10" pollWhileDataFound="false" pollingInterval="30"
useOracleConnectionPool="true" minPoolSize="1" maxPoolSize="100"
incrPoolSize="5" decrPoolSize="1" connectionLifetime="0" acceptCredentialsInUri="false"
useAmbientTransaction="true" notifyOnListenerStart="true"
notificationPort="-1" dataFetchSize="65536" longDatatypeColumnSize="0"
skipNilNodes="true" maxOutputAssociativeArrayElements="32"
enableSafeTyping="false" insertBatchSize="20" useSchemaInNameSpace="true"
enableBizTalkCompatibilityMode="true" enablePerformanceCounters="false">
<mlsSettings language="" dateFormat="" dateLanguage="" numericCharacters=""
sort="" territory="" comparison="" currency="" dualCurrency=""
iSOCurrency="" calendar="" lengthSemantics="" nCharConversionException="true"
timeStampFormat="" timeStampTZFormat="" timeZone="" />
</binding>
</oracleEBSBinding>
</bindings>
<client>
<endpoint address="oracleebs://oracle_ebs_instance/" binding="oracleEBSBinding"
bindingConfiguration="OracleEBSBinding" contract="System.ServiceModel.Channels.IRequestChannel"
name="MyRequestChannel" />
</client>
</system.serviceModel>
</configuration>
建立輸入 (服務) 通道
您可以設定 Oracle E-Business 配接器,藉由在 OracleEBSBinding 實例上設定系結屬性,以對 Oracle 資料庫的表格和檢視進行輪詢。 接著,您可以使用此系結來建立通道監聽器,從中取得 IInputChannel 通道,以接收來自配接器的輸入作業。
建立並開啟 IInputChannel 以接收輸入作業的訊息
建立 OracleEBSBinding 的實例。
設定輸入作業所需的系結屬性。 例如,針對輪詢作業,您至少必須設定 InboundOperationType、 PolledDataAvailableStatement、 PollingAction 和 PollingInput 系結屬性,以設定 Oracle E-Business 配接器來輪詢 Oracle 資料庫。
使用 BindingParameterCollection 類別建立係結參數集合,並設定認證。
在 OracleEBSBinding 上叫用 BuildChannelListener<IInputChannel> 方法,以建立通道接聽程式。 您可以將 Oracle 連線 URI 指定為此方法的其中一個參數。
開啟接聽程式。
在接聽程式上叫用 AcceptChannel 方法,以取得 IInputChannel 通道。
開啟通道。
下列程式代碼示範如何建立通道接聽程式,並取得 IInputChannel 以接收來自配接器的輸入作業訊息。
這很重要
Oracle E-Business 配接器僅支援單向接收。 因此,您必須使用 IInputChannel 從 Oracle E-Business Suite 接收輸入作業的訊息。
// Create a binding: specify the InboundOperationType, the PolledDataAvailableStatement, the PollingAction, and
// the PollingInput binding properties.
OracleEBSBinding binding = new OracleEBSBinding();
binding.InboundOperationType = InboundOperation.Polling;
binding.PolledDataAvailableStatement = "SELECT COUNT (*) FROM MS_SAMPLE_EMPLOYEE";
binding.PollingAction = "InterfaceTables/Poll/FND/APPS/MS_SAMPLE_EMPLOYEE";
binding.PollingInput = "SELECT * FROM MS_SAMPLE_EMPLOYEE FOR UPDATE";
// Create a binding parameter collection and set the credentials
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = "myuser";
credentials.UserName.Password = "mypassword";
BindingParameterCollection bindingParams = new BindingParameterCollection();
bindingParams.Add(credentials);
// Get a listener from the binding and open it.
Uri connectionUri = new Uri("oracleebs://oracle_ebs_instance/");
IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>(connectionUri, bindingParams);
listener.Open();
// Get a channel from the listener and open it.
IInputChannel channel = listener.AcceptChannel();
channel.Open();