Oracle 数据库适配器使适配器客户端能够对 Oracle 数据库执行复合操作。 复合操作可以包括:
对表和视图执行插入、更新、删除和选择操作。
存储过程和函数,在包内部或外部。
单个复合操作可以按任意顺序包含任意数量的这些操作。 例如,可以有两个插入,后跟一个删除,最后是一个存储过程执行。 此外,还可以针对不同的数据库表或视图执行不同的操作。 有关适配器如何支持复合操作的详细信息,请参阅 在 Oracle 数据库中执行复合操作。 有关复合操作的 SOAP 消息的结构的信息,请参阅 复合操作的消息架构。
如何在 Oracle 数据库上执行复合操作?
使用具有 BizTalk Server 的 Oracle 数据库适配器对 Oracle 数据库执行操作涉及构建基块以使用 Oracle 数据库开发 BizTalk 应用程序中所述的过程性任务。 若要对 Oracle 数据库执行复合操作,这些任务包括:
在 Visual Studio 中创建 BizTalk 项目,并为要调用的所有操作生成架构。
手动创建一个架构文件,其中包含对在上一步中生成的所有架构的引用。
在 BizTalk 项目中创建消息,以便从 Oracle 数据库发送和接收消息。 这些消息必须符合在上一步中创建的请求和响应架构。
创建业务流程以调用 Oracle 数据库上的复合操作。
生成和部署 BizTalk 项目。
通过创建物理发送和接收端口来配置 BizTalk 应用程序。
启动 BizTalk 应用程序。
本主题提供有关如何执行这些任务的说明。
生成架构
在本主题中,为了演示如何执行复合操作,我们将按相同的顺序执行以下任务:
将记录插入 ACCOUNTACTIVITY 表。
通过在 ACCOUNT_PKG 包中调用GET_ALL_ACTIVITY过程,检索 ACCOUNTACTIVITY 表中的所有记录。
从 ACCOUNTACTIVITY 表中删除记录。
运行随示例一起提供的脚本以创建 ACCOUNTACTIVITY 表。 有关示例的详细信息,请参阅 架构示例。
必须创建 BizTalk 项目并使用“使用适配器服务加载项”生成架构。 有关如何生成架构的详细信息,请参阅 在 Visual Studio 中检索 Oracle 数据库操作的元数据 。
创建复合架构定义
现在必须在 Visual Studio BizTalk 项目中创建一个复合架构,该架构引用为单个操作创建的架构。 执行以下步骤来创建复合架构定义。
添加复合架构定义
将架构文件添加到 Visual Studio 中的 BizTalk 项目。 右键单击解决方案名称,指向 “添加”,然后单击“ 新建项”。 在“ 添加新项 ”对话框中的“ 类别 ”框中,单击“ 架构文件”。 在 “模板 ”框中,单击“ 架构”。 指定架构文件的名称,然后单击“ 确定”。
对于此示例,将架构文件名指定为
CompositeSchema.xsd
。添加对为要执行的不同操作生成的架构的引用。 在此示例中,为操作生成的不同架构包括:
OracleDBBinding.xsd,用于对 ACCOUNTACTIVITY 表执行插入和删除操作。
OracleDBBinding2.xsd,用于GET_ALL_ACTIVITY过程。
添加引用:
右键单击 CompositeSchema.xsd 中的根 <架构> 节点,然后单击“ 属性”。
在“属性”框中,单击“导入”属性 (...) 省略号按钮。
在“ 导入 ”对话框中,从“ 将新架构导入为 ”列表中,选择“ XSD 导入”,然后单击“ 添加”。
在 “BizTalk 类型选取器 ”对话框中,展开 BizTalk 项目名称节点,展开 “架构”,然后选择要导入的架构。 对于此示例,请选择“ <BizTalk_project_name>”。OracleDBBinding.xsd。 单击 “确定” 。
重复此步骤以导入 <BizTalk_project_name>。OracleDBBinding2.xsd 也一样。
在“ 导入 ”对话框中,单击“ 确定”。
将两个子节点添加到根架构节点。 一个子节点对应于执行复合操作的请求架构。 另一个子节点对应于响应架构。 与请求架构相对应的节点可以具有任何名称。 与响应架构相对应的节点必须request_schema_node>响应调用<。 对于此示例,我们将请求架构节点称为 Request。 因此,响应架构节点称为 RequestResponse。
注意
默认情况下, 根 节点也会添加到新的架构文件中。 可以将 根 节点重命名为 “请求”。 若要重命名节点,请右键单击节点名称,然后单击“ 重命名”。
在“架构>”节点下<添加节点:
右键单击“架构”<>节点,指向“插入架构节点”,然后单击“子记录”。
将新节点重命名为 RequestResponse。
在 “请求” 节点下添加子节点,这些节点对应于将作为复合操作一部分执行的每个操作的请求架构。 对于此示例,必须添加对应于以下内容的子节点:
对 ACCOUNTACTIVITY 表执行插入和删除操作。
GET_ALL_ACTIVITY过程。
重要
必须按照要执行操作的相同顺序添加节点。 例如,如果要插入记录,则执行存储过程,然后删除记录,必须先为 Insert 操作添加一个节点,然后为存储过程添加一个节点,最后添加一个用于 Delete 操作的节点。
将子节点添加到 “请求 ”节点:
右键单击“ 请求 ”节点,指向“ 插入架构节点”,然后单击“ 子记录”。
插入架构
重命名记录,以对应于作为复合操作一部分执行的操作的请求架构。 例如,将节点重命名为“Insert”。
将 Insert 节点映射到 ACCOUNTACTIVITY 表上 Insert 操作的请求架构。 为此,请右键单击“ 插入 ”节点,然后单击“ 属性”。 在 “属性” 框中,从“ 数据结构类型 ”列表中选择“ 插入 (引用) ”。
重复这些步骤,为GET_ALL_ACTIVITY存储过程和删除操作的请求架构添加节点。 指定节点名称并将其映射到下表中提到的相应架构。
节点名称 映射到架构 GET_ALL_ACTIVITY GET_ALL_ACTIVITY (参考) 删除 删除 (引用)
在 RequestResponse 节点下添加子节点,这些节点对应于将作为复合操作一部分执行的每个操作的响应架构。 对于此示例,必须添加对应于以下内容的子节点:
对 ACCOUNTACTIVITY 表执行插入和删除操作。
GET_ALL_ACTIVITY存储过程。
重要
必须按照与 请求 节点下的子节点相同的顺序添加子节点。
将子节点添加到 RequestResponse 节点:
右键单击 RequestResponse 节点,指向 “插入架构节点”,然后单击“ 子记录”。
重命名记录,使其对应于作为复合操作的一部分执行的操作的响应架构。 例如,将节点重命名为“InsertResponse”。
将 InsertResponse 节点映射到 ACCOUNTACTIVITY 表上的 Insert 操作的响应架构。 为此,请右键单击“ InsertResponse ”节点,然后单击“ 属性”。 在 “属性 ”框中的“ 数据结构类型 ”列表中,选择“ InsertResponse (引用) ”。
重复这些步骤,为GET_ALL_ACTIVITY存储过程和 Delete 操作的响应架构添加节点。 指定节点名称并将其映射到下表中提到的相应架构。
节点名称 映射到架构 GET_ALL_ACTIVITYResponse GET_ALL_ACTIVITYResponse (参考) DeleteResponse DeleteResponse (参考)
保存 CompositeSchema.xsd 文件。
定义消息和消息类型
在上一步中创建的复合架构描述了业务流程中消息所需的“类型”。 消息通常是一个变量,其类型由相应的架构定义。 现在必须为业务流程创建消息,并将其链接到在上一步中创建的架构。
创建消息并链接到架构
在 Visual Studio 中将业务流程添加到 BizTalk 项目。 从 解决方案资源管理器,右键单击 BizTalk 项目名称,指向“添加”,然后单击“新建项”。 键入 BizTalk 业务流程的名称,并单击“ 添加”。
打开 BizTalk 项目的“业务流程视图”窗口(如果尚未打开该窗口)。 为此,请单击“ 视图”,指向 “其他窗口”,然后单击“ 业务流程视图”。
在“业务流程视图”中,右键单击“ 消息”,然后单击“ 新建消息”。
右键单击新创建的消息,然后选择“ 属性窗口”。
在Message_1的“属性”窗格中,执行以下操作:
使用此选项 要执行此操作 标识符 键入 Request
消息类型 从下拉列表中展开“ 架构”,然后选择“ Composite_Op.CompositeSchema.Request”,其中“Composite_Op”是 BizTalk 项目的名称。 CompositeSchema 是为复合操作手动创建的架构。 重复步骤 2 以创建新消息。 在新邮件的“ 属性 ”窗格中,执行以下操作:
使用此选项 要执行此操作 标识符 键入 Response
消息类型 从下拉列表中展开“ 架构”,然后选择 “Composite_Op.CompositeSchema.RequestResponse”。
设置业务流程
必须创建 BizTalk 业务流程才能使用 BizTalk Server 在 Oracle 数据库上执行复合操作。 在此业务流程中,会在定义的接收位置放置请求消息。 请求消息必须符合前面创建的复合架构。 Oracle 数据库适配器使用此消息并将其传递到 Oracle 数据库。 来自 Oracle 数据库的响应将保存到另一个位置。 必须包含“发送和接收”形状,才能分别将消息发送到 Oracle 数据库和接收响应。 用于执行复合操作的基本业务流程如下所示:
添加消息形状
请确保为每个邮件形状指定以下属性。 “形状”列中列出的名称是刚才提到的业务流程中显示的消息形状的名称。
形状 | 形状类型 | 属性 |
---|---|---|
ReceiveMessage | 接收 | - 将 Name 设置为 ReceiveMessage - 将 “激活” 设置为 “True” |
SendMessage | 发送 | - 将 “名称” 设置为 SendMessage |
ReceiveResponse | 接收 | - 将 Name 设置为 ReceiveResponse - 将 “激活” 设置为 “False” |
SendResponse | 发送 | - 将 “名称” 设置为 SendResponse |
添加端口
请确保为每个逻辑端口指定以下属性。 “端口”列中列出的名称是业务流程中显示的端口名称。
端口 | 属性 |
---|---|
MessageIn | - 将 标识符 设置为 MessageIn - 将 Type 设置为 MessageInType - 将 通信模式 设置为 单向 - 将 通信方向 设置为 接收 |
LOBPort | - 将 标识符 设置为 LOBPort - 将 Type 设置为 LOBPortType - 将 通信模式 设置为 请求-响应 - 将 通信方向 设置为 “发送-接收” |
ResponseOut | - 将 标识符 设置为 ResponseOut - 将 Type 设置为 ResponseOutType - 将 通信模式 设置为 单向 - 将 “通信方向 ”设置为 “发送” |
指定操作形状的消息,并将其连接到端口
下表指定了应设置的属性及其值,以便为操作形状指定消息并将消息链接到端口。 “形状”列中列出的名称是前面提到的业务流程中显示的消息形状的名称。
形状 | 属性 |
---|---|
ReceiveMessage | - 将 消息 设置为 请求 - 将 操作 设置为 MessageIn.CompositeOp.Request |
SendMessage | - 将 消息 设置为 请求 - 将 操作 设置为 LOBPort.CompositeOp.Request |
ReceiveResponse | - 将 消息 设置为 响应 - 将 操作 设置为 LOBPort.CompositeOp.Response |
SendResponse | - 将 消息 设置为 响应 - 将 操作 设置为 ResponseOut.CompositeOp.Request |
指定这些属性后,消息形状和端口将连接,并且业务流程完成。
现在,必须生成 BizTalk 解决方案并将其部署到BizTalk Server。 有关详细信息,请参阅 生成和运行业务流程。
配置 BizTalk 应用程序
部署 BizTalk 项目后,前面创建的业务流程将列在BizTalk Server管理控制台的“业务流程”窗格下。 必须使用 BizTalk Server 管理控制台来配置应用程序。 有关演练,请参阅 演练:部署基本 BizTalk 应用程序。
配置应用程序涉及:
为应用程序选择主机。
将业务流程中创建的端口映射到 BizTalk Server 管理控制台中的物理端口。 对于此业务流程,必须:
定义硬盘上的位置和相应的文件端口,你将在其中删除请求消息。 BizTalk 业务流程将使用请求消息并将其发送到 Oracle 数据库。
在硬盘上定义一个位置和相应的文件端口,BizTalk 业务流程将在其中删除包含 Oracle 数据库的响应的响应消息。
定义物理 WCF-Custom 或 WCF-OracleDB 发送端口以将消息发送到 Oracle 数据库。 由于作为复合操作一部分的操作在单个事务中执行,因此请确保 UseAmbientTransaction 绑定属性设置为 True。
还必须在发送端口中指定操作。 复合操作的操作为“<http://Microsoft.LobServices.OracleDB/2007/03/CompositeOperation”。> 有关如何创建端口的信息,请参阅 手动配置到 Oracle 数据库适配器的物理端口绑定。 有关如何为端口指定操作的详细信息,请参阅 为 Oracle 数据库配置 SOAP 操作。
注意
使用使用适配器服务 BizTalk 项目加载项生成架构还会创建一个绑定文件,其中包含有关端口的信息以及要为这些端口设置的操作。 可以从 BizTalk Server 管理控制台导入此绑定文件,为出站呼叫创建发送端口 () ,或接收入站呼叫) 的端口 (。 有关详细信息,请参阅 使用到 Oracle 数据库的端口绑定文件配置物理端口绑定。 如果导入此绑定文件,则发送端口上的操作将设置为动态操作,涉及生成架构时在“使用适配器服务加载项”中选择的所有操作。 对于复合操作,必须将动态操作替换为“<http://Microsoft.LobServices.OracleDB/2007/03/CompositeOperation”。>
启动应用程序
必须启动 BizTalk 应用程序才能对 Oracle 数据库执行复合操作。 有关启动 BizTalk 应用程序的说明,请参阅 如何启动业务流程。
在此阶段,请确保:
用于接收业务流程请求消息的 FILE 接收端口正在运行。
用于从业务流程接收响应消息的 FILE 发送端口正在运行。
WCF-Custom 或 WCF-OracleDB 发送端口以将消息发送到 Oracle 数据库正在运行。
操作的 BizTalk 业务流程正在运行。
执行操作
运行应用程序后,必须将请求消息删除到 FILE 接收位置。 请求消息的架构必须符合前面创建的复合操作的架构。 例如,在 ACCOUNTACTIVITY 表中插入记录、调用GET_ALL_ACTIVITY存储过程并从 ACCOUNTACTIVITY 表中删除记录的请求消息为:
<Request xmlns="http://Composite_Op.CompositeSchema">
<Insert xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY">
<RECORDSET>
<ACCOUNTACTIVITYRECORDINSERT>
<TID>1</TID>
<ACCOUNT>100001</ACCOUNT>
<AMOUNT>1500</AMOUNT>
<DESCRIPTION></DESCRIPTION>
<TRANSDATE>2008-06-21T15:52:19</TRANSDATE>
<PROCESSED>n</PROCESSED>
</ACCOUNTACTIVITYRECORDINSERT >
</RECORDSET>
</Insert>
<GET_ALL_ACTIVITY xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG"/>
<Delete xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY">
<FILTER>WHERE AMOUNT = 1500</FILTER>
</Delete>
</Request>
前面的请求消息首先插入一条记录,然后调用GET_ALL_ACTIVITY过程来获取 ACCOUNTACTIVITY 表中的所有记录。 然后,通过指定 FILTER 子句删除插入的记录。 有关使用 Oracle 数据库 适配器对 Oracle 数据库执行复合操作的请求消息架构的详细信息,请参阅复合操作的消息架构。
业务流程使用消息并将其发送到 Oracle 数据库。 Oracle 数据库的响应保存在定义为业务流程的一部分的其他 FILE 位置。 例如,Oracle 数据库对上述请求消息的响应类似于以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<RequestResponse xmlns="http://Composite_Op.CompositeSchema">
<InsertResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOOT/Table/ACCOUNTACTIVITY">
<InsertResult>1</InsertResult>
</InsertResponse>
<GET_ALL_ACTIVITYResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG">
<ALLRECS>
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element msdata:IsDataSet="true" name="NewDataSet">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="NewTable">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="TID" type="xs:decimal" />
<xs:element minOccurs="0" name="ACCOUNT" type="xs:decimal" />
<xs:element minOccurs="0" name="AMOUNT" type="xs:decimal" />
<xs:element minOccurs="0" name="DESCRIPTION" type="xs:string" />
<xs:element minOccurs="0" name="TRANSDATE" type="xs:dateTime" />
<xs:element minOccurs="0" name="PROCESSED" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<NewTable>
......
......
</NewTable>
......
......
<NewTable>
<TID>10</TID>
<ACCOUNT>100001</ACCOUNT>
<AMOUNT>1000</AMOUNT>
<TRANSDATE>2008-07-28T21:39:57</TRANSDATE>
<PROCESSED>n</PROCESSED>
</NewTable>
</NewDataSet>
</diffgr:diffgram>
</ALLRECS>
</GET_ALL_ACTIVITYResponse>
<DeleteResponse xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/ACCOUNTACTIVITY">
<DeleteResult>1</DeleteResult>
</DeleteResponse>
</RequestResponse>
前面的响应包含多个结果集,这些结果集对应于作为复合操作的一部分执行的不同操作。 例如, InsertResult
元素包含“1”,指示 Insert 操作插入的行数。 同样, DeleteResult
元素包含“1”,指示 Delete 操作删除的行数。
重要
如果在执行复合操作时遇到超时问题,可能是因为连接数小于复合操作中的操作数,涉及:
包含 BFILE、BLOB、CLOB、NCLOB 和 REF CURSOR 作为 OUT 或 IN OUT 参数的存储过程。
- 选择操作。
若要解决此问题,必须确保如果复合操作中有“n”个此类操作,则为 MinPoolSize 绑定属性指定的值为“n+1”或更大。 有关 MinPoolSize 绑定属性的详细信息,请参阅 使用绑定属性。
最佳实践
部署并配置 BizTalk 项目后,可以将配置设置导出到名为绑定文件的 XML 文件。 生成绑定文件后,可以从文件导入配置设置,这样就无需为同一业务流程创建发送端口和接收端口等项。 有关绑定文件的详细信息,请参阅 重用 Oracle 数据库适配器绑定。