您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Oracle直接调用webservices
Oracle直接调用webservicesOracle调用C#的WebServer实质上就是java调用C#的WebServerJAVA调用webservice,需要注意的地方:1.服务器未能识别HTTP标头SOAPAction的值:症状一:WebService+ASP.NET应用程序部署到服务器默认目录中,在IE中用http://服务器地址/程序目录名/默认启动页面名发生“服务器未能识别HTTP标头SOAPAction的值”错误。症状二:在Java平台上调用.NETWebService的服务时,出现服务器未能识别HTTP标头SOAPAction的值。症状三:在Java平台下调用.NETWEBService,出现数据时有时无。解决对策:给.NET的WebService类(即.asmx文件下的类)添加属性[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]小知识:什么是SoapAction?它在WSDL中有何作用?SOAPActionHTTPrequestheader被用来标识SOAPHTTP请求的目的地,其值是个URI地址。SOAP发送并不限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTPSOAP请求时,其HTTP客户端必须使用/指明SOAPActionHTTPrequestheader。SOAPActionheader的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。SOAPActionheader的值为空串()表示SOAP消息的目的地由HTTP请求的URI标识;无值则表示没有指定这条消息的目的地。发现本机Oracle10g中含有UTL_DBWS包准备试一下下载文件:dbws-callout-utility-10131.ziploadjava导入jar时需加入绝对路径导入用户为Sys用户,其他普通用户导入时某些地方权限不足oralce官方提供的方法调试成功,但是在读取返回值l_return:=l_xmltype_out.extract('//return/text()').getNumberVal();经过以xmltype类型插入数据库中结果为HelloWorld1Responsexmlns=此模式不能被认为是有效的Xml格式,所以读取失败。把xmlns属性从结果中注释掉,把Namespace设为空,且把[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]注释掉。返回值为HelloWorld1ResponseHelloWorld1Result1/HelloWorld1Result/HelloWorld1Response成功。关于l_xmltype_in的值,可以在提供WebServer网页上入口格式找到此函数中带有输出型参数返回结果//----------------------------------------------以下为Oracle官方实例(p_int_1INNUMBER,p_int_2INNUMBER)RETURNNUMBERASl_servicesys.UTL_DBWS.service;l_callsys.UTL_DBWS.call;l_wsdl_urlVARCHAR2(32767);l_namespaceVARCHAR2(32767);l_service_qnamesys.UTL_DBWS.qname;l_port_qnamesys.UTL_DBWS.qname;l_operation_qnamesys.UTL_DBWS.qname;l_xmltype_inSYS.XMLTYPE;l_xmltype_outSYS.XMLTYPE;l_returnNUMBER;BEGINl_wsdl_url:=':=':=sys.UTL_DBWS.to_qname(l_namespace,'Calculator');l_port_qname:=sys.UTL_DBWS.to_qname(l_namespace,'CalculatorPort');l_operation_qname:=sys.UTL_DBWS.to_qname(l_namespace,'ws_add');l_service:=sys.UTL_DBWS.create_service(wsdl_document_location=URIFACTORY.getURI(l_wsdl_url),service_name=l_service_qname);l_call:=sys.UTL_DBWS.create_call(service_handle=l_service,port_name=l_port_qname,operation_name=l_operation_qname);l_xmltype_in:=SYS.XMLTYPE('?xmlversion=1.0encoding=utf-8?ws_addxmlns='||l_namespace||'int1'||p_int_1||'/int1int2'||p_int_2||'/int2/ws_add');l_xmltype_out:=sys.UTL_DBWS.invoke(call_Handle=l_call,request=l_xmltype_in);sys.UTL_DBWS.release_call(call_handle=l_call);sys.UTL_DBWS.release_service(service_handle=l_service);l_return:=l_xmltype_out.extract('//return/text()').getNumberVal();RETURNl_return;END;//--------------------------------------------以下为转载在oracle中直接调用webservices怎么操作,在网上查了很久,相关资料,比较少。在这里整理一下,给需要的童鞋们做参考。。Window下oracle开发webservices1,去oracle官网上下载dbws-callout-utility-10131.zip地址:,解压后放到oracle安装目录下的oracle_install_dir/sqlj/lib中;3,在命令行中利用loadjava命令(一般安装完jdk或oracle之后就会有)将jar包导入oracle对应的用户中:loadjava-uuser/password@oracle-r-v-f-genmissing-s-grantpublicdbwsclientws.jardbwsclientdb102.jar若为SYS用户,命令为:loadjava-uuser/password-r-v-f-genmissing-s-grantpublicdbwsclientws.jardbwsclientdb102.jar4,如果未发现UTL_DBWS(可以在plsql中敲入sys.若未有utl_dbws显示,则需要进行初始化),需要运行之前下载的包中dbws-callout-utility-10131/sqlj/lib/utl_dbws_body.sql及utl_dbws_decl.sql5,编写sql函数并发布createorreplacefunctionFUNC_GENERATE_LOGINNAME(contentVARCHAR2,cellNumberVARCHAR2,senderVARCHAR2)returnVARCHAR2ASl_servicesys.utl_dbws.SERVICE;l_callsys.utl_dbws.call;l_resultANYDATA;l_wsdl_urlVARCHAR2(1024);l_service_nameVARCHAR2(200);l_operation_nameVARCHAR2(200);l_input_paramssys.UTL_DBWS.anydata_list;l_xmltype_inSYS.XMLTYPE;l_xmltype_outSYS.XMLTYPE;BEGINl_wsdl_url:=':='servicesService';l_operation_name:='sendMessage';l_service:=sys.UTL_DBWS.create_service(wsdl_document_location=URIFACTORY.getURI(l_wsdl_url),service_name=l_service_name);l_call:=sys.UTL_DBWS.create_call(service_handle=l_service,port_name=NULL,operation_name=l_operation_name);l_input_params(1):=ANYDATA.ConvertVarchar2(content);l_input_params(2):=ANYDATA.ConvertVarchar2(cellNumber);l_input_params(3):=ANYDATA.ConvertVarchar2(sender);l_result:=sys.UTL_DBWS.invoke(call_handle=l_call,input_params=l_input_params);sys.UTL_DBWS.release_call(call_handle=l_call);sys.UTL_DBWS.release_service(service_handle=l_service);RETURNANYDATA.AccessVarchar2(l_result);EXCEPTIONWHENOTHERSTHENRETURNsubstr(sqlerrm,0,2000);ENDFUNC_GENERATE_LOGINNAME;6,看结果selectfunc_generate_loginname('testTest','1234567','xxxxxx')fromdual;7对于其中出现的异常,最可能的就是出现权限不足,可以利用如下语句解决:begindbms_java.grant_permission('DZZWPT','SYS:java.lang.RuntimePermission','getClassLoader','');dbms_java.grant_policy_permission('DZZWPT','SYS','java.io.FilePermission','*');---dbms_java.grant_permis
本文标题:Oracle直接调用webservices
链接地址:https://www.777doc.com/doc-2847954 .html