我的APEX有问题。我们有两台服务器。一个(运行Oracle APEX)是大学服务器,我们只能访问工作区。另一个是我家里的Linux计算机,它充当服务器(使用Jasperreports容器运行Tomcat)。我想从APEX机器向Jasperreports机器发送UTL_HTTP请求。有一个按钮,它使用以下代码触发进程:
begin xlib_jasperreports.set_report_url('http://X.X.X.X: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); -- stop rendering of the current APEX page apex_application.g_unrecoverable_error := true; end;
按下触发按钮20到30秒后,我得到以下错误消息:
ORA-29273:HTTP请求失败ORA-06512:在“SYS.UTL_HTTP”,第1029行ORA-12535:TNS:操作超时
我通过设置一个公共网址检查了set_report_url函数。它奏效了。有没有人有线索?
提前致谢, Haniball
答案 0 :(得分:1)
后一版本的Oracle具有网络ACL安全性,因此架构所有者可能无权访问该特定URL。但是,我预计会出现安全违规行为。
另一种选择是它被数据库服务器和家用机器之间的防火墙阻止。 (可能)数据库服务器机器可能已设置为仅允许访问一小部分站点(或根本不访问)。您的家用计算机上可能还有防火墙,可防止从不在IP地址/范围列表中的计算机进行访问。
针对各种网站(例如google.com主页)尝试一些基本的UTL_HTTP操作,并查看您获得的回复。
错过了明显的UTL_HTTP.set_transfer_timeout。可能是在家庭服务器上工作需要太长时间。