本节讨论如何使用故障排除技术来解决在使用适用于 Oracle E-Business Suite 的 Microsoft BizTalk 适配器时可能遇到的操作错误。
启用跟踪
有关 Oracle E-Business 适配器中的跟踪支持的详细信息,请参阅 Oracle E-Business Suite 适配器中的诊断跟踪和消息日志记录。
已知问题
以下是使用 BizTalk 适配器包时可能会遇到的最常见错误,以及可能的原因和解决方法。
加载适配器绑定时出错
问题
尝试启动“添加适配器服务引用 Visual Studio 插件”或“使用适配器服务 BizTalk 项目外接程序”时,会收到以下错误:
There was an error loading the binding, <binding name>, from your system configuration.
ConfigurationErrorsException: Exception has been thrown by the target of an invocation.
原因
尝试启动“添加适配器服务引用插件”或“使用适配器服务插件”时,WCF 会加载所有已安装适配器的适配器绑定。 反过来,适配器绑定依赖于企业应用程序的特定客户端软件。 由于以下一个或两个原因,可能会遇到此问题:
未在安装了适配器的计算机上安装所需的 LOB 客户端软件。
你执行了适配器的典型安装或完整安装,该适配器安装 BizTalk 适配器包中包含的所有适配器。 但是,只能为一个企业应用程序安装 LOB 客户端库。 因此,GUI 无法加载其他适配器的绑定。
解决方案
请确保在安装了 BizTalk 适配器包的计算机上安装所需的 LOB 客户端版本。 有关支持的客户端版本的信息,请参阅安装驱动器>:\Program Files\Microsoft BizTalk 适配器包中<提供的安装指南。
请确保执行适配器的自定义安装,以便仅安装所需的适配器。
Oracle E-Business Suite 适配器不显示在 BizTalk Server 管理控制台中的适配器列表中
问题
与 BizTalk Server 随附的早期版本的适配器不同,BizTalk 适配器包随附的 Oracle E-Business 适配器不会显示在 BizTalk Server 管理控制台中的适配器列表中。
原因
最新的 Oracle 电子商务适配器是一种 WCF 自定义绑定。 因此,尽管 BizTalk Server 管理控制台显示 WCF-Custom 适配器,但它不显示 WCF 自定义绑定,因此不显示基于 WCF 的 Oracle 电子商务适配器。
解决方案
您可以按照 将 Oracle E-Business Suite 适配器添加到 BizTalk Server 管理控制台 中所述的步骤,显式添加 Oracle E-Business 适配器至 BizTalk Server 管理控制台。
在 Oracle 电子商务套件上执行操作时出现错误
问题
在使用 BizTalk Server 对 Oracle E-Business Suite 执行任何操作时,适配器会出现以下错误。
对于 BizTalk Server
System.ArgumentNullException: Value cannot be null.
原因
未指定消息的 WCF 操作。 WCF 要求为每个操作指定一个 SOAP 操作,该操作通知适配器要对 LOB 系统执行的操作。
解决方案
在发送端口中指定 SOAP 操作,或在 BizTalk 流程中将其作为消息上下文属性。 有关说明,请参阅 为 Oracle 电子商务套件配置 SOAP 操作。 请参阅 Oracle EBS 适配器的消息和消息架构,以查看每个操作的操作列表。
由于 Oracle 客户端版本不正确,接收位置的请求消息可能会丢失,从而导致 BizTalk 进程崩溃。
问题
在 BizTalk 业务流程编排中定义的接收位置投递请求消息后,业务流程将处理消息,BizTalk 主机(BTSNTSvc.exe)崩溃并重启。
原因
安装 Oracle 客户端会在 PATH 变量中添加对最新客户端程序集的引用。 此外,对 Oracle 客户端程序集最近安装的引用位于对现有客户端程序集的引用之前。 因此,如果最新的 Oracle 客户端安装不是受支持的客户端版本,BizTalk 主机会崩溃,然后重启。
例如,假设计算机上已安装支持的 Oracle 客户端 11.1.0.7,并且 PATH 变量具有以下引用:
C:\oracle\product\11.1.0\client_1\bin;
如果在同一计算机上安装了不受支持的 Oracle 客户端(例如 10.2.0.3),则 PATH 变量将具有以下引用:
C:\oracle\product\10.2.0\db_2\bin;C:\oracle\product\11.1.0\client_1\bin;
请注意,在受支持的版本之前引用不支持的客户端版本,因此 BizTalk 主机崩溃。 如果有多个 BizTalk 主机正在运行,那么托管适配器的那个主机就会崩溃。
解决方案
如果在同一计算机上安装了多个 Oracle 客户端,请确保在 PATH 变量中的其他 Oracle 客户端版本之前引用受支持的 Oracle 客户端版本。 例如,如果支持的 Oracle 客户端版本为 11.1.0.7,则 PATH 变量中的引用必须如下所示:
C:\oracle\product\11.1.0\client_1\bin;C:\oracle\product\10.2.0\db_2\bin;
适配器在执行操作时可能会引发溢出异常
问题
使用适配器时,如果尝试在 DataSet 或类型较弱的 REF CURSORS 内执行包含 Oracle 数字数据类型的操作,适配器可能会引发溢出异常。
原因
如果为 DataSets 中的 Oracle 数字数据类型提供较大值,或者为无法适应相应 .NET 类型的弱类型 REF CURSORS 提供较大值,就会出现这种情况。
解决方案
如果要在 DataSets 或弱类型 REF CURSORS 中传递 Oracle 数值数据类型的大值,则必须通过将 EnableSafeTyping 绑定属性的值设置为 true 来启用安全键入。 启用安全键入会将 DataSet 或弱类型的 REF CURSORS 中的 Oracle 数值数据类型公开为字符串。
适配器在执行 ExecuteScalar操作时可能会引发算术溢出异常。
问题
如果使用适配器,如果在检索大量数据的 ExecuteScalar作中尝试执行 SELECT 语句,适配器将引发以下异常:“System.OverflowException: 算术运算导致溢出。
原因
这是由于 ODP.NET 中 ExecuteScalar 操作的已知限制。 ODP.NET 尝试将数据放入 .NET Decimal 数据类型,如果结果太大而无法容纳在 .NET Decimal 类型中,则会引发异常。
解决方案
在 ExecuteScalar作的 SELECT 语句中使用 TO_CHAR()将返回的数据转换为字符串。
适配器客户端在执行作时可能会引发以下异常:“无法检索用户 ID、责任 ID、应用程序 ID。检查是否传入了正确的值。
问题
在您对 Oracle E-Business Suite 工件(接口表、接口视图、并发程序和请求集)执行操作时,这些适配器客户端可能会引发此异常。
原因
如果在对接口表、接口视图、并发程序和请求集执行作时,提供 Oracle 用户名、密码和责任名称的错误组合,则会出现这种情况。 Oracle 电子商务适配器需要这些值才能为这些项目设置应用程序上下文。 有关设置应用程序上下文的详细信息,请参阅 “设置应用程序上下文”。
解决方案
必须指定 Oracle 用户名、密码和责任的正确组合,以便为 Oracle E-Business Suite 项目适当设置应用程序上下文。 若要指定 Oracle 用户名和密码的值,必须使用 OracleUserName 和 OraclePassword 绑定属性。 若要为 Oracle 责任指定值,可以使用 OracleEBSResponsibilityName 绑定属性或消息上下文属性。
BizTalk 项目中的 RootNode TypeName 错误
问题
在 Visual Studio 中的一个 BizTalk 项目中,如果从"使用适配器服务"附加组件生成的架构包含 RootNode TypeName 属性的无效字符或保留字,那么在编译项目时会发生以下错误:
Node <node reference> - Specify a valid .NET type name for this root node.
The current .NET type name of this root node is invalid (it is a reserved BizTalk Keyword or is an invalid C# identifier).
解决方案
右键单击错误中引用的 rood 节点,然后选择“ 属性”。
对于 RootNode TypeName 属性,请删除任何非法字符或保留字,例如点(.)。
在 Visual Studio 中使用适配器时绑定警告无效
问题
使用适配器在 Visual Studio 2013 中创建应用程序并打开适配器生成的配置文件(app.config),会看到如下所示的警告:
The element 'bindings' has invalid child element 'oracleEBSBinding'. List of possible elements expected: 'basicHttpBinding, customBinding, ...
原因
出现此警告是因为 Oracle 电子商务适配器绑定 oracleEBSBinding
不是 Windows Communication Foundation (WCF)附带的标准绑定。
解决方案
可以放心地忽略此警告。
如果在同一应用程序中使用多个通知架构,或者在同一主机上的多个应用程序中使用通知架构,BizTalk Server 将引发异常
问题
BizTalk Server 会引发 XLANG 异常或提示应用程序无法定位文档规范,因为多个架构与消息类型匹配。
原因
发生此情况的原因有以下任一:
已在 BizTalk Server 项目中生成了多个通知架构,将其部署到 BizTalk Server 应用程序,然后运行应用程序以接收来自 Oracle 数据库的通知。 由于通知架构很常见,因此在 BizTalk Server 应用程序中部署的架构之间存在冲突。
对于多个项目,你已为每个 BizTalk Server 项目生成通知架构,将每个项目部署到同一主机上的单独 BizTalk Server 应用程序,然后运行应用程序或应用程序以从 Oracle 数据库接收通知。 由于可以在 BizTalk Server 中的应用程序中访问架构和程序集,因此在各种 BizTalk Server 应用程序和程序集下部署的常见架构之间存在冲突。
解决方案
对 BizTalk Server 应用程序使用单个通知架构文件。 如果需要在同一主机上的多个 BizTalk Server 应用程序中使用通知架构,请创建一个包含单个通知架构的应用程序,然后使用 BizTalk Server 中所有其他应用程序的通知架构。
在 Visual Studio 中浏览 Oracle 电子商务套件项目时超时异常
问题
在 Visual Studio 项目中使用“添加适配器元数据向导”、“添加适配器服务引用插件”或“使用适配器服务加载项”浏览 Oracle E-Business Suite 工件时,您可能会遇到超时异常。
原因
如果托管 Oracle 电子商务套件的服务器速度缓慢,服务器位于远程位置,或者所查找的架构具有大量项目,则可能会出现这种情况。
解决方案
可以选择增加 SendTimeout 绑定属性的值,或在类别文本框中的 “搜索”中 提供搜索表达式,以减少适配器检索的项目数。
有关指定绑定属性的详细信息,请参阅 配置 Oracle E-Business Suite 的绑定属性。 有关在 Oracle E-Business Suite 中搜索项目的详细信息,请参阅 浏览、搜索和获取 Oracle E-Business Suite 作业的元数据。
在事务处理入站作中使用适配器时,内存使用率和线程计数增加
问题
在一个已处理的入站操作中(例如轮询),如果在被轮询的表中没有可用数据,并且适配器继续轮询,随着时间的推移,您会发现内存使用量和线程计数增加。
原因
如果表中没有可供轮询的数据,则每次接收超时周期后,Windows Communication Foundation(WCF)都会启动一个新线程以继续轮询操作。 因此,线程计数和内存使用量会在一段时间内增加。 但是,如果正在轮询的表具有一些数据,则同一线程将继续执行所有后续轮询。
解决方案
建议将 ReceiveTimeout 设置为最大可能值,即 24.20:31:23.6470000 (24 天),以便仅每隔 24 天生成一个新线程。 这将确保内存使用率和线程计数不会过快增长。
有关 ReceiveTimeout 绑定属性的详细信息,请参阅 有关 Oracle E-Business Suite 绑定属性的 BizTalk 适配器的信息。 有关指定绑定属性的说明,请参阅 配置 Oracle E-Business Suite 的绑定属性。
注释
将适配器与 BizTalk Server 配合使用时,将超时设置为较大的值不会影响适配器的功能。