我正在使用utl_http
包向与Oracle相同的服务器(本地)上的IIS站点发出HTTP GET请求。有时它可以工作,我得到了响应,但更多时候它会挂起大约15秒,然后我收到这个错误:
ORA-29273:HTTP请求失败ORA-06512:在“SYS.UTL_HTTP”,第1722行ORA-29263:HTTP协议错误
作为测试,我在IIS站点中有一个小的静态文本文件,所以这就是我测试它的方式:
select utl_http.request('http://domain.com/test.txt') from dual
如果我在Oracle Apex中运行它而不是直接在db上运行,我会遇到同样的问题。
我尝试过的另一件事是使用long utl_htp.begin_request()
方法而不是utl_http.request()
快捷方式创建我自己的包来执行HTTP请求。这给出了完全相同的问题(有时工作但主要是错误 - 同样的错误)。
我看到的模式是,如果我等待一段时间然后尝试,它会在前2-10次工作,然后开始出错。当它工作时,我立即得到响应,当它出错时,错误总是有延迟。
如果我使用远程Web浏览器请求文本文件URL(或站点中的任何其他资源),那么每次都会得到正确的响应。
我已尝试设置如下所示的超时但它没有任何效果。例如,不是在3秒后超时,而是在显示错误之前持续10或15秒。
UTL_HTTP.set_transfer_timeout(3);
我认为我可以排除ACL,因为它有时会起作用。
有谁知道可能导致此行为的原因?
答案 0 :(得分:0)
可能的原因
- >您的TNS-Listener可能有问题。
在命令提示符窗口中,尝试运行TNSPING service_name
..尝试快速运行几次并检查其中一些是否失败。
我曾经遇到过类似的问题。尝试重新配置您的TNS-Listener。
还必须有一个选项,您可以在TNS-listener定义中提供IP号码。这有时也解决了这些问题。
- > IIS问题。
答案 1 :(得分:0)
了解SET_PERSISTENT_CONN_SUPPORT过程: https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_http.htm#i1027673
使用:utl_http.set_persistent_conn_support(true,30);
答案 2 :(得分:0)
你能超过并发HTTP连接的限制吗?我隐约记得当我忘记关闭HTTP连接时遇到了类似的问题。