使用 Oracle E-Business Suite 创建频道

在 WCF 通道模型中,调用 Oracle 电子商务套件上的操作,并通过 WCF 通道与适用于 Oracle 电子商务套件的 Microsoft BizTalk 适配器交换 SOAP 消息来接收结果。

  • 通过使用 IRequestChannel 或 IOutputChannel 将消息发送到适配器,调用) (出站操作。

  • 通过 IInputChannel 接收入站操作的消息。

    本部分中的主题提供有关如何创建和配置用于入站和出站操作的通道形状的信息。

创建出站 (客户端) 通道

可以使用 IRequestChannelIOutputChannel 调用 Oracle E-Business Suite 上的操作。 在任一情况下,首先使用适当的接口创建 System.ServiceModel.ChannelFactory 。 然后,使用工厂创建通道。 创建通道后,可以使用它调用适配器上的操作。

创建并打开出站通道

  1. 使用终结点和绑定为所需通道形状创建和初始化 ChannelFactory 实例。 终结点指定 Oracle E-Business Suite 连接 URI,绑定是 OracleEBSBinding 的实例。

  2. 使用 Credentials 属性为通道工厂提供 Oracle E-Business Suite 凭据

  3. 打开通道工厂。

  4. 通过在通道工厂上调用 CreateChannel 方法获取通道的实例。

  5. 打开通道。

    可以在代码或配置中指定绑定和终结点地址。

在代码中指定绑定和终结点地址

下面的代码示例演示如何通过在代码中指定绑定和终结点地址来创建 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>  

创建入站 (服务) 通道

可以通过在 OracleEBSBinding 实例上设置绑定属性,将 Oracle E-Business 适配器配置为轮询 Oracle 数据库表和视图。 然后,使用此绑定生成一个通道侦听器,可以从该侦听器获取 IInputChannel 通道以接收来自适配器的入站操作。

创建并打开 IInputChannel 以接收入站操作的消息
  1. 创建 OracleEBSBinding 的实例。

  2. 设置入站操作所需的绑定属性。 例如,对于轮询操作,必须至少设置 InboundOperationTypePolledDataAvailableStatementPollingActionPollingInput 绑定属性,以配置 Oracle E-Business 适配器以轮询 Oracle 数据库。

  3. 使用 BindingParameterCollection 类创建绑定参数集合并设置凭据。

  4. 通过在 OracleEBSBinding 上调用 BuildChannelListener<IInputChannel> 方法创建通道侦听器。 将 Oracle 连接 URI 指定为此方法的参数之一。

  5. 打开侦听器。

  6. 通过在侦听器上调用 AcceptChannel 方法获取 IInputChannel 通道。

  7. 打开通道。

    以下代码演示如何创建通道侦听器并获取 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();  

另请参阅

使用 WCF 通道模型开发 Oracle E-Business Suite 应用程序