1

我正在使用soap_api 方法来访问oracle 中的Web 服务。当我创建 add_numbers 函数并执行 add_numbers 函数时,函数不会执行。在 select 语句中调用 web 服务时触发以下错误

select add_numbers(2,5) from dual

错误是

  • ORA-29273: HTTP 请求失败
  • ORA-06512:在“SYS.UTL_HTTP”,第 1029 行
  • ORA-12541: TNS: 没有监听器
  • ORA-06512:在“dbtest.SOAP_API”,第 144 行
  • ORA-06512:在“dbtest.ADD_NUMBERS”,第 34 行 FROM!


我正在使用这个链接中的这个函数和soap_api方法。以http://www.oracle-base.com/articles/9i/sumption-web-services-9i.php#Top为例

用于调用 Web 服务的函数。

CREATE OR REPLACE FUNCTION add_numbers (p_int_1 IN  NUMBER,  p_int_2  IN  NUMBER)  RETURN NUMBER AS
  l_request   soap_api.t_request;
  l_response  soap_api.t_response;
  l_return    VARCHAR2(32767);  
  l_url          VARCHAR2(32767);
  l_namespace    VARCHAR2(32767);
  l_method       VARCHAR2(32767);
  l_soap_action  VARCHAR2(32767);
  l_result_name  VARCHAR2(32767);
BEGIN
  l_url         := 'http://192.168.0.75:9001/LicWebService.asmx';
  l_namespace   := 'xmlns="http://192.168.0.75:9001/"';
  l_method      := 'AddNum';
  l_soap_action := 'http://192.168.0.75:9001/AddNum';
  l_result_name := 'return';  
  l_request := soap_api.new_request(p_method => l_method,   p_namespace=> l_namespace);
  soap_api.add_parameter(p_request => l_request,p_name => 'int1',p_type => 'xsd:integer',p_value   => p_int_1);
  soap_api.add_parameter(p_request => l_request,p_name=> 'int2', p_type=> 'xsd:integer',p_value   => p_int_2);
  l_response := soap_api.invoke(p_request => l_request, p_url=> l_url,  p_action => l_soap_action);
  l_return := soap_api.get_return_value(p_response  => l_response,p_name=> l_result_name, p_namespace => NULL);
END;

请建议我在哪里犯错。

4

1 回答 1

1

您的 TNS 设置不正确或 TNS 服务未运行。这就是UTL_HTTPapi 不工作的原因(由 使用SOAP_API)。

按照链接进行故障排除并解决此问题。

于 2012-09-20T17:01:36.947 回答