从Oracle PL / SQL使用Web服务

时间:2008-09-01 07:54:45

标签: sql oracle web-services plsql

我们的应用程序目前正在与许多Web服务连接。我们有自己的软件包,有人在几年前使用UTL_HTTP编写,它通常可以工作,但需要对SOAP信封进行一些硬编码才能使用某些系统。我想让它更通用,但缺乏经验知道我将要处理多少场景。变化是需要声明的名称空间和元素的格式。我们必须处理带有一些参数的简单调用和用编码字符串传递大量数据的调用。

我知道10g有UTL_DBWS,但是没有大量的用例在线。它是否足够稳定和灵活,适合一般用途? Documentation

4 个答案:

答案 0 :(得分:6)

我使用了UTL_HTTP这很简单且有效。如果您面临使用自己的软件包的挑战,您可以在网络上的UTL_HTTP周围的许多包装程序包中找到解决方案(Google“从pl / sql中消费Web服务”,引导您进入,例如 http://www.oracle-base.com/articles/9i/ConsumingWebServices9i.php

没有人使用UTL_DBWS的原因是它在默认安装的数据库中不起作用。您需要将大量Java类加载到数据库中,但标准指令似乎有缺陷 - 该过程左右突出Java错误并最终失败。似乎很少有人愿意花时间追踪软件包依赖性,以使这种方法有效。

答案 1 :(得分:2)

我遇到了这个挑战,发现并安装了Sten在Oracle-Base上建议的'SOAP API'软件包。它在UTL_HTTP之上提供了一些良好的信封创建功能。

但是,您的问题存在一些限制。 SOAP_API假设所有请求都是简单的XML-即只有一个层标记层次结构。

我扩展了SOAP_API包,允许客户端代码随意插入额外的标记。因此,您可以插入子级别,例如,继续构建请求,并记住插入结束标记。

名称空间问题是项目的负担 - 不同级别的XML具有不同的名称空间。

我使用的一个很好的调试工具是来自Pocket Soap的TCP Trace。 www.pocketsoap.com/tcptrace/ 您可以将其设置为代理,并在客户端和服务器代码之间查看HTTP请求和响应对象。

说了这么多,我们真的很喜欢在数据库中拥有一个SOAP客户端 - 我们可以完全访问所有数据和现有的PLSQL代码,可以轻松地遍历游标并在需要时通过SOAP调用外部应用程序。它比使用大量自定义Java或.NET代码部署中间层要快得多,也更容易。祝你好运,如果你想看到我增强的SOAP API代码,请告诉我。

答案 2 :(得分:1)

我们也以类似于你所描述的方式使用UTL_HTTP。我对UTL_DBWS没有任何直接经验,所以我希望你能跟进你可以收集到的任何信息/经验。

@kogus,对于许多应用来说,这不是一个很好的设计。 PL / SQL是一种成熟的编程语言,已被用于许多大型应用程序。

答案 3 :(得分:-2)

查看此older post。我必须同意该帖子的#1答案;很难想象这可能是一个很好的设计。

你不能写一个服务或独立的应用程序,它会与数据库中的表通信吗?然后,您可以在该表上实现您想要的任何触发器。