oracle调用C#开发web services

1,  去oracle官网上下载dbws-callout-utility-10131.zip

地址:https://oracle-base.com/articles/10g/utl_dbws-10g(注意请根据自己oracle的版本来选择下载对应的jar)

2,  解压后放到oracle安装目录下的<oracle_install_dir>/sqlj/lib中;

3,  在命令行中利用loadjava命令(一般安装完jdk或oracle之后就会有)将jar包导入oracle对应的用户中:

loadjava -u user/password@oracle -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar

若为SYS用户,命令为:

loadjava -u user/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar

(本人每次都会使用SYS用户权限比较大,在Win7与Win2008之后的系统开始命令行窗口的使用尽量使用“管理员模式”,安装时会产生拒绝访问的情况,有一种可能就是安装的Oracle数据库具备功能或者可以把Oracle服务关了再试试(这句有机会真的可以试试))

4,  如果未发现UTL_DBWS(可以在plsql中敲入sys.若未有utl_dbws显示,则需要进行初始化),需要运行之前下载的包中dbws-callout-utility-10131/sqlj/lib/ utl_dbws_body.sql及utl_dbws_decl.sql

5,  编写sql函数并发布

create or replace function FUNC_GENERATE_LOGINNAME(content VARCHAR2,cellNumber VARCHAR2,sender VARCHAR2)

return VARCHAR2 AS

l_service        sys.utl_dbws.SERVICE;

l_call           sys.utl_dbws.call;

l_result         ANYDATA;

l_wsdl_url       VARCHAR2(1024);

l_service_name   VARCHAR2(200);

l_operation_name VARCHAR2(200);

l_input_params   sys.UTL_DBWS.anydata_list;

l_xmltype_in       SYS.XMLTYPE;

l_xmltype_out      SYS.XMLTYPE;

BEGIN

l_wsdl_url       := 'http://xxxx.xxxx.xxxx.xxxx:xxxx/project/axis/services.jws?wsdl';(这里一定要加?wsdl)

l_service_name   := 'servicesService';(就是我们*.asmx的那个类名)

l_operation_name := 'sendMessage';(就是我们具有WebMothed属性的方法名)

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);

RETURN ANYDATA.AccessVarchar2(l_result);

EXCEPTION

WHEN OTHERS THEN

RETURN substr(sqlerrm, 0, 2000);

END FUNC_GENERATE_LOGINNAME;

6,看结果select func_generate_loginname('testTest','1234567','xxxxxx') from dual;

7对于其中出现的异常,最可能的就是出现权限不足,可以利用如下语句解决:

begin

dbms_java.grant_permission( 'DZZWPT', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '' );

dbms_java.grant_policy_permission('DZZWPT','SYS','java.io.FileP ermission','*');

---dbms_java.grant_permission( 'DZZWPT','SYS:java.lang.IllegalAccessException','getClassLoader', '' );

dbms_java.grant_permission( 'DZZWPT', 'SYS:java.lang.RuntimePermission', 'accessClassInPackage.sun.util.calendar', '' );

dbms_java.grant_permission( 'DZZWPT', 'SYS:java.lang.RuntimePermission', 'setFactory', '' );

dbms_java.grant_permission( 'DZZWPT', 'SYS:java.util.PropertyPermission', 'HTTPClient.socket.idleTimeout', 'write' );

dbms_java.grant_permission( 'DZZWPT', 'SYS:java.Net.SocketPermission', 'localhost', 'resolve' );

dbms_java.grant_permission( 'DZZWPT', 'SYS:java.net.SocketPermission', '192.168.21.203:80', 'connect,resolve' );

dbms_java.grant_permission( 'DZZWPT', 'SYS:java.lang.RuntimePermission', 'createClassLoader', '' );

end;

8.以上为官方实例,接下来我们来试试HelloWorld

1).首先,我们要对自己写的WebServer做一些修改,

在WebServer类前面把Namespace设为空,且把[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

根据WebServer中的说明来确定输入参数、输出参数的格式

l_xmltype_in 的值就是<HelloWorld />

输出就是

<HelloWorld1Response>
  <HelloWorld1Result>Hello World</HelloWorld1Result>
</HelloWorld1Response>

 

oracle直接调用web services的更多相关文章

  1. ORACLE存储过程调用Web Service

    1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...

  2. oracle触发器 调用 web接口

    最近要求开发当数据表发生变化的时候调用web接口的需求,上网找了好几篇文章看着都觉得不是很好,也根据别人的思路去实现了下,感觉都不太理想,最后使用URLConnection实现了调用.具体查看一下代码 ...

  3. Oracle Agile PLM Web Services 的实现

    Oracle 的产品Agile PLM内置了许多Web Services,其他系统可以通过Web Servcies实现对Agile PLM系统资源的访问.快速学会使用的方法,是去Oracle的官网下载 ...

  4. Java与.NET 的Web Services相互调用

    一:简介 本文介绍了Java与.NET开发的Web Services相互调用的技术.本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用 ...

  5. asp调用.net xml web services

    来源:http://www.cnblogs.com/notus/archive/2006/08/10/473000.html#2662503 (是不是实际上可以用这个办法调用任何xml web ser ...

  6. 使用LoadRunner对Web Services进行调用--Add Service Call

    利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...

  7. UTL_DBWS - Consuming Web Services in Oracle 10g Onward

    from:http://oracle-base.com/articles/10g/utl_dbws-10g.php In a previous article I presented a method ...

  8. BizTalk发布WS-Security的web services

    最近做个项目,biztalk跟OTM(Oracle Transportation Management)系统做对接,双方通过web services通讯,这部分是BizTalk发布WS-Securit ...

  9. 分分钟带你玩转 Web Services

    当大型需求被数个公司分割开来,各公司系统相互交换数据的问题就会接踵而来. 毕竟是多家不同的公司的产品,研发开发语言.采用技术框架基本上是百花齐放. 怎样让自家系统提供的服务具有跨平台.跨语言.跨各种防 ...

随机推荐

  1. 构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境

    构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境 整个环境的结构图. 一.准备工作 gitlab和harbor我是安装在kubernetes集群外 ...

  2. iptables详解之filter

    iptables详解之filter iptables令很多小伙伴脑阔疼,下面我们来说说如何使用iptables. 一.iptables格式 1.1.iptables 帮助 通过iptables --h ...

  3. django根据已有数据库表生成model类

    django根据已有数据库表生成model类 创建一个Django项目 django-admin startproject 'xxxx' 修改setting文件,在setting里面设置你要连接的数据 ...

  4. vue-cli 中stylus写样式莫名报错?

    报错一: expected "indent", got "eos" 错误截图如下: 在确认stylus安装无误后,我们应该看看是否stylus代码不符合规范. ...

  5. php 安装vld扩展

    下载地址 : http://pecl.php.net/package/vld 此处包是 : vld-0.14.0.tgz 1. tar -xvf  vld-0.14.0.tgz  -C  INSTAL ...

  6. Unix 线程改变创建进程中变量的值(2)

    执行环境:Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 ...

  7. Making Dishes (P3243 [HNOI2015]菜肴制作)

    Background\text{Background}Background I've got that Luogu Dialy has been \text{I've got that Luogu D ...

  8. 【Spring Cloud】服务注册与发现组件——Eureka(二)

    一.Eureka原理 1.架构图 首先来看eureka的官方结构图 所有应用作为Eureka Client和Eureka Server交互,服务提供者启动时向Eureka Server注册自己的IP. ...

  9. opencv实践::对象提取与测量

    问题描述 照片是来自太空望远镜的星云图像,科学家想知道它的面 积与周长. 解决思路 方法一: 通过二值分割+图像形态学+轮廓提取 #include <opencv2/opencv.hpp> ...

  10. 在npm上发布自己的vue组件库(使用npm install 或者 CDN的方式引用)

    一.npm publish发布包到npm库的命令是npm publish npm publish发布包,需要先配置webpack.json文件,如果没有webpack.json文件,可以通过npm i ...