1

我对 APEX 有疑问。我们有两台服务器。一个(运行 Oracle APEX)是大学服务器,我们只能访问工作区。另一台是我家中的 Linux 计算机,它充当服务器(使用 Jasperreports 容器运行 Tomcat)。我想从 APEX 机器向 Jasperreports 机器发送一个 UTL_HTTP 请求。有一个按钮,它使用以下代码触发一个进程:

开始
  xlib_jasperreports.set_report_url('http://XXXX:8080/JasperReportsIntegration/report');
  xlib_jasperreports.show_report (p_rep_name => :p5_rep_name,
                                  p_rep_format => :p5_rep_format,
                                  p_data_source => :p5_data_source,
                                  p_out_filename => :p5_out_filename,
                                  p_rep_locale => :p5_rep_locale,
                                  p_rep_encoding => :p5_rep_encoding,
                                  p_additional_params => :p5_additional_params);

  -- 停止渲染当前 APEX 页面
  apex_application.g_unrecoverable_error := true;
结尾;

按下触发按钮 20 到 30 秒后,我收到以下错误消息:

ORA-29273:HTTP 请求失败 ORA-06512:在“SYS.UTL_HTTP”,第 1029 行 ORA-12535:TNS:操作超时

我通过设置一个通用 url 检查了 set_report_url 函数。它奏效了。有人有线索吗?

在此先感谢, Haniball

4

1 回答 1

1

后一个版本的 Oracle 具有网络 ACL 安全性,因此架构所有者可能没有访问该特定 URL 的权限。但是,我预计会违反安全规定。

另一种选择是它被数据库服务器和您的家庭计算机之间的防火墙阻止。可能(很可能)数据库服务器机器已设置为仅允许访问一小部分站点(或根本不允许访问)。您的家用计算机上也可能有防火墙,可阻止不在 IP 地址/范围列表中的计算机进行访问。

尝试针对各种站点(例如 google.com 主页)执行一些基本的 UTL_HTTP 操作,然后查看您得到的响应。


错过了明显的 UTL_HTTP.set_transfer_timeout。可能是在家庭服务器上这项工作花费的时间太长了。

于 2011-01-09T22:47:56.507 回答