IT俱乐部 Oracle Oracle通过procedure调用webservice接口的全过程

Oracle通过procedure调用webservice接口的全过程

准备工作

定义测试的webservice及其中的方法

如何发布全新的webservice并测试,可以参考博客C# webservice 接口编写、发布与测试

方法体如下

[WebMethod]
public string testProcedure(string sInput)
{
	return "执行时间:" + DateTime.Now.ToString() + sInput;
}

Oracle语句详情

-- 声明变量和数据类型
declare
    req        utl_http.req;         -- HTTP请求句柄
    resp       utl_http.resp;        -- HTTP响应句柄
    url        varchar2(4000) := 'http://10.xx.xx.xx:8085/WebService.asmx'; -- Web Service的URL地址
    soap_env   varchar2(4000);       -- SOAP请求包体
    buffer     varchar2(32767);      -- 字符串缓冲区
    utf8_data  clob;                 -- 存储UTF-8编码的CLOB数据类型(存储大量文本数据的数据类型)
    raw_data   raw(32767);           -- RAW数据类型,用于存储二进制数据
    raw_buffer raw(32767);           -- RAW类型的缓冲区
    line       varchar2(32767);      -- 每行读取的数据
    idx        integer := 1;         -- 循环索引变量
begin

    -- 构造SOAP请求包体
    soap_env := 
        '' ||
        '
' || -- SOAP头,这里为空 '' || -- SOAP主体开始 ' ' || -- 调用Web Service的方法名 ' ' || -- 方法参数开始 ' testConnect + 中文test' || -- 参数值,包括英文和中文字符 '' || -- 方法参数结束 ' ' || -- 方法调用结束 '' || -- SOAP主体结束 ''; -- SOAP包体结束 -- 开始发起HTTP POST请求,如果此部分存在疑问,请自行寻找前端请求报文相关内容学习。 req := utl_http.begin_request(url, 'POST', 'HTTP/1.1'); -- 初始化HTTP请求 utl_http.set_header(req, 'Content-Type', 'application/soap+xml; charset=utf-8'); -- 设置Content-Type头部 utl_http.set_header(req, 'Content-Length', length(soap_env)); -- 设置Content-Length头部 utl_http.write_text(req, soap_env); -- 写入SOAP请求包体到HTTP请求 -- 获取HTTP响应 resp := utl_http.get_response(req); -- 获取HTTP响应句柄 dbms_lob.createtemporary(utf8_data, true); -- 创建临时CLOB变量用于存储响应数据 -- 循环读取HTTP响应体 loop begin utl_http.read_raw(resp, raw_buffer, 32767); -- 读取响应体到RAW缓冲区 dbms_lob.writeappend(utf8_data, -- 将RAW缓冲区的数据追加到CLOB中 utl_raw.length(raw_buffer), -- 数据长度 utl_raw.cast_to_varchar2(raw_buffer)); -- 将RAW转换为VARCHAR2再写入CLOB exception when utl_http.end_of_body then exit; -- 如果到达响应体结尾,则退出循环 when others then dbms_output.put_line('在读取响应时发生错误: ' || sqlerrm); -- 其他异常处理 exit; -- 退出循环 end; end loop; utl_http.end_response(resp); -- 结束HTTP响应 -- 循环读取并打印CLOB中的内容 idx := 1; while idx

重要参数说明

上述程序已经解决了中文乱码的问题,但是还是不太完美,传参的中文会乱码,但是方法内部的中文不会乱码。

Web Service的URL地址

url varchar2(4000) := 'http://10.xx.xx.xx:8085/WebService.asmx';

构造SOAP请求包体

soap_env := 
'' ||
'
' || -- SOAP头,这里为空 '' || -- SOAP主体开始 ' ' || -- 调用Web Service的方法名 ' ' || -- 方法参数开始 ' testConnect + 中文test' || -- 参数值,包括英文和中文字符 '' || -- 方法参数结束 ' ' || -- 方法调用结束 '' || -- SOAP主体结束 ''; -- SOAP包体结束

其中testProcedure为webservice中定义的测试方法名,sInput为方法的参数,多个参数,自行添加。标签中间填写这个参数传的实际值,其余部分无需修改。

构造SOAP请求包体方法

我使用了soapui这个工具,怎么使用可以参考博客SoapUI 测试WebService接口可用性

依次如下操作即可:

如果需要把上面的功能变成function或者procedure,请自行搜索相关的方法实现即可。

到此这篇关于Oracle通过procedure调用webservice接口的全过程的文章就介绍到这了,更多相关Oracle procedure调用webservice内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/database/oracle/12908.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部