使用Oracle PL / SQL中的Web服务
如今,我们的应用程序与许多Web服务接口。我们有我们自己的软件包,几年前有人使用UTL_HTTP编写了它,并且通常可以使用,但是需要对SOAP信封进行一些硬编码才能与某些系统一起使用。我想使其更加通用,但是缺乏经验,无法知道我将要处理多少种情况。变化之处在于需要声明的名称空间以及元素的格式。我们既要处理带有几个参数的简单调用,又要处理以编码字符串形式传递大量数据的那些调用。
我知道10g具有UTL_DBWS,但在线上没有大量用例。它足够稳定和灵活,足以用于一般用途吗?文献资料
解决方案
回答
看看这个较早的帖子。我必须同意该帖子的第一答案;很难想象会有一个很好的设计方案。
我们不能编写将与数据库中的表进行通信的服务或者独立应用程序吗?然后,我们可以在该表上实现所需的任何触发器。
回答
我们还以类似于我们描述的方式使用了UTL_HTTP。我对UTL_DBWS没有任何直接的经验,所以希望我们能跟进可以收集的任何信息/经验。
@kogus,不,对于许多应用程序来说,这是一个非常不错的设计。 PL / SQL是一种成熟的编程语言,已用于许多大型应用程序。
回答
我使用了简单易用的UTL_HTTP
。如果我们面对自己的程序包所面临的挑战,则可以在网上围绕UTL_HTTP的众多包装程序包中找到一种解决方案(Google"从pl / sql消费Web服务",例如
http://www.oracle-base.com/articles/9i/ConsumingWebServices9i.php)
没有人使用UTL_DBWS
的原因是它在默认安装的数据库中不起作用。我们需要将大量的Java类加载到数据库中,但是标准指令似乎有缺陷,因为该过程会左右喷出Java错误,并最终导致失败。似乎很少有人愿意花时间来跟踪软件包的依赖关系,以使此方法有效。
回答
我遇到了这个挑战,找到并安装了Sten建议在Oracle-Base上使用的" SOAP API"软件包。它在UTL_HTTP之上提供了一些良好的信封创建功能。
但是,有些限制与问题有关。 SOAP_API假定所有请求都是简单的XMLi.e。仅一层标记层次结构。
我扩展了SOAP_API包,以允许客户端代码任意插入额外的标记。因此,我们可以插入一个子级别,例如,继续构建请求,并记住插入一个结束标记。
命名空间问题是一个负担,因为项目的不同XML级别具有不同的命名空间。
我使用的一个不错的调试工具是Pocket Soap的TCP跟踪。
www.pocketsoap.com/tcptrace/
我们像代理一样设置它,并观察客户端和服务器代码之间的HTTP请求和响应对象。
说了这么多,我们真的很喜欢在数据库中有一个SOAP客户端,我们可以完全访问所有数据和现有的PLSQL代码,可以轻松地遍历游标,并在需要时通过SOAP调用外部应用程序。这比部署带有大量自定义Java或者.NET代码的中间层要容易得多。祝我们好运,如果我们想查看我的增强型SOAP API代码,请告诉我。