若要对 Oracle E-Business Suite 的 Microsoft BizTalk 适配器调用操作,您的代码将充当 WCF 客户端,并将出站操作发送到适配器。 在 WCF 通道模型中,代码通过通道发送请求消息来调用适配器上的操作。
若要调用入站操作(例如,使用适配器提供的轮询操作接收基于轮询的数据更改消息),您的代码将作为WCF服务,并从适配器接收入站操作。 换句话说,代码通过通道从适配器接收请求消息。
本节中的主题概述了如何结合使用 Oracle 电子商务适配器和 WCF 通道模型。
WCF 通道模型概述
客户端和服务通过交换 SOAP 消息进行通信。 WCF 通道模型是此消息交换的低级别抽象。 它提供接口和类型,使你能够使用称为通道堆栈的分层协议堆栈发送和接收消息。 堆栈的每个层都由一个通道组成,并且每个通道都是从 WCF 绑定创建的。 传输通道在最低层。 传输通道在服务与客户端之间实现基础传输机制,并将每个消息作为 System.ServiceModel.Message 呈现给较高层(最终使用的应用程序)。 WCF Message 类是 SOAP 消息 的抽象。 WCF 提供了多个通道接口(称为通道形状),这些接口对基本 SOAP 消息交换模式(如请求-答复或单向)进行建模。 WCF 传输绑定提供一个或多个通道形状的实现,较高层可用于发送和接收消息。 有关 WCF 通道模型的详细信息,请参阅以下位置 https://go.microsoft.com/fwlink/?LinkId=82614的“通道模型概述”。
Oracle 电子商务适配器是一个 WCF 自定义传输绑定,用于将 Oracle E-Business Suite 组件作为 WCF 服务公开。
Oracle 电子商务套件适配器支持的通道形状
适配器实现以下 WCF 通道形状:
IRequestChannel (System.ServiceModel.Channels.IRequestChannel)。 IRequestChannel 接口用于实现请求-回复消息交换的客户端功能。 可以使用IRequestChannel 执行需要接收响应的操作,例如对接口表执行 SELECT 查询。
IOutputChannel (System.ServiceModel.Channels.IOutputChannel)。 此模型执行单向消息交换的客户端功能。 可以使用 IOutputChannel 来调用不需要响应的操作,例如调用没有 OUT 参数的过程。
重要
适配器对 Oracle 客户端的所有基础调用都是同步的。 这包括对 Oracle 客户端的调用,这是通过 IOutputChannel 进行的操作的结果。 使用 IOutputChannel 时,适配器将放弃从 Oracle 客户端收到的响应。
IInputChannel (System.ServiceModel.Channels.IInputChannel)。 此形状实现单向消息交换的服务端。 可以使用IInputChannel 接收来自适配器的入站消息。
与任何 WCF 绑定一样,Oracle 电子商务适配器使用工厂模式向应用程序代码提供通道。 使用 Microsoft.Adapters.OracleEBSBinding 对象创建以下项的实例:
System.ServiceModel.ChannelFactory<IRequestChannel> 提供 IRequestChannel 通道,可用于对适配器调用请求-响应作。
System.ServiceModel.ChannelFactory<IOutputChannel> 提供可用于在适配器上调用单向作的 IOutputChannel 通道。
System.ServiceModel.IChannelListener<IInputChannel> 提供 IInputChannel 通道,以便用于从适配器接收入站消息。
在 WCF 通道模型中为 Oracle Enterprise Business 解决方案创建消息
在 WCF 中, System.ServiceModel.Channels.Message 类提供 SOAP 消息的内存表示形式。 通过调用静态 Message.Create 方法创建消息实例。
SOAP 消息有两个重要部分,必须在创建要发送到 Oracle 电子商务适配器 的消息 实例时指定。
消息操作是 SOAP 消息标头的一部分的字符串。 消息操作标识应该在 Oracle E-Business Suite 上调用的操作。 下面显示了在 Oracle E-Business Suite 的应收账款应用程序下,调用客户接口并发程序的指定消息操作:
ConcurrentPrograms/AR/RACUST
。消息正文包含操作的参数数据。 消息正文由格式正确的 XML 组成,符合 Oracle E-Business 适配器期望的用于请求操作的消息架构。 以下消息正文指定要调用 客户接口 并发程序的请求消息。
<RACUST xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/ConcurrentPrograms/AR"> <Description>Customer Interface Program</Description> <StartTime></StartTime> <CREATE_RECIPROCAL_CUSTOMER>Yes</CREATE_RECIPROCAL_CUSTOMER> <ORG_ID>203</ORG_ID> </RACUST>
有关 Oracle E-Business 适配器消息架构和操作消息操作的信息,请参阅 适用于 Oracle 电子商务套件的 BizTalk 适配器的消息和消息架构。
Create 方法已重载,并提供多个不同的选项来填写消息正文。 以下代码演示如何使用 XmlReader 创建消息实例来提供消息正文。 在此代码中,将从文件读取消息正文。
XmlReader readerIn = XmlReader.Create("ConcProgRequest.xml");
Message messageIn = Message.CreateMessage(MessageVersion.Default,
"ConcurrentPrograms/AR/RACUST",
readerIn);
其中,ConProgRequest.xml 包含请求消息。
重要
您必须在 消息 实例中提供一个消息操作。 创建 消息 实例时通常执行此作。