使用 Oracle 电子商务套件创建通道

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

  • 通过使用 IRequestChannelIOutputChannel 将消息发送到适配器,您可以调用操作(出站操作)。

  • 通过 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>  

创建入站(服务)通道

通过将 Oracle E-Business 适配器设置为在 OracleEBSBinding 实例上设置绑定属性来轮询 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 电子商务适配器仅支持单向接收。 因此,必须使用 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 电子商务套件应用程序