连载1:利用PHP创建由Oracle 驱动的SOAP服务

2016-01-29 12:57 4 1 收藏

连载1:利用PHP创建由Oracle 驱动的SOAP服务,连载1:利用PHP创建由Oracle 驱动的SOAP服务

【 tulaoshi.com - PHP 】

能够通过 Web 服务为其他基于 Internet 的 Web 应用程序提供数据和功能正迅速成为重大开发中必不可或缺的组成部分。尽管 Oracle 提供了许多托管 Web 服务的方法,但这么做始终不是最有效的方法,特别是在已经使用 PHP 来开发 Web 应用程序的情况下。在本手册中,我将引导您使用 PHP 逐步开发 SOAP 客户端和服务器,并使用 Oracle 作为数据的后端。

要真正了解这个问题的答案,您需要了解 PHP 脚本执行的生命周期以及 Web 服务器对该生命周期的影响,本手册将从此开始逐步展开论述。

必需组件
出于本手册的需要,您将使用一个非常简单的数据库后端,该数据库后端将在一个表中存储有关已发表书籍的某些基本信息,该表由以下 CREATE 语句表示:

CREATE TABLE books(isbn VARCHAR(32) PRIMARY KEY,
author VARCHAR(50),
title VARCHAR(50),
price FLOAT);

该表将充当 SOAP 服务器的数据源,而数据源又会根据需要将数据提供给一个或多个 SOAP 客户端。尽管在实际应用程序中,您的数据库可能比较复杂,但这里描述的方法仍然适用。
建立数据库(最好在其中放置一些虚拟数据)之后,您现在就可以深入了解用 PHP 开发 SOAP 服务器所涉及的内容了。

SOAP 服务在 PHP 中的工作方式
用 PHP 开发 SOAP 服务的选择有多种,所有方法都涉及到 SoapServer PHP 类。该类是所有基于 PHP 的 SOAP 服务的核心部分,其语法如下:

$server = new SoapServer($wsdl [, $options]);

其中,$wsdl 是描述托管服务的 Web 服务描述语言 (WSDL) 文档的位置;$options 是一组键/值对,其中包含了在创建服务时需要考虑的所有设置选项。稍后,您将了解有关 WSDL 文档的更多内容;现在,我们来看一下在创建新的 SOAP 服务时可用的选项:
soap_version:与客户端通信时使用的 SOAP 协议版本。可能的选项是用于 SOAP 1.1 版的常量 SOAP_1_1 或用于 SOAP 1.2 版的 SOAP_1_2。
encoding:用于该 SOAP 服务的字符编码(即字符串 ISO-8859-1)。
actor:该 SOAP 服务的角色 URI。
classmap:将 WSDL 数据类型映射到 PHP 中的类名的一组键/值对本身。如果使用该选项,PHP 将根据 WSDL 中定义的类型将这些类呈现给连接客户端。
因此,要使用名为 bookman.wsdl 的 WSDL 文档创建一个使用 SOAP v1.2 协议的 SOAP 服务,您应该按如下方法构建服务器:
$server = new SoapServer(“bookman.wsdl”, array(‘soap_version’ = SOAP_1_2));

该过程的下一步是创建服务方法。在 PHP 中,这可以使用两个主要方法完成。第一个(也是最灵活的)方法是使用 addFunction() 方法手动指定要托管在服务中的每个函数,并将函数名传递给该方法以公开到客户端:
function add($a, $b) {
return $a + $b;
}

$server-addFunction(‘add’);

您还可以通过提供一组函数名来添加多个函数:
function add($a, $b) {
return $a + $b;
}

function sub($a, $b) {
return $a - $b;
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

$server-addFunction(array(‘add’, ‘sub’));

最后,您可以通过传递特殊常量 SOAP_FUNCTIONS_ALL 而非函数名来导出所有定义的函数,如下所示:
function add($a, $b) {
return $a + $b;
}

function sub($a, $b) {
return $a - $b;
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

$server-addFunction(SOAP_FUNCTIONS_ALL);

正如您从上述示例中看到的那样,公开为 SOAP 服务的函数看上去与常规 PHP 函数完全相同。但是,根据定义,适用于在 SOAP 服务上下文中使用的函数的几个规则并不适用于常规 PHP 函数:
函数必须以相同的顺序接受相同的输入参数,如提供给服务器的 WSDL 文档定义的那样。
函数不能输出任何内容(即打印/回显)。
函数必须返回一个或多个值(多个值以一组关联的键/值对的形式返回)。
由于从体系结构或审美的角度看,在过程函数中表示所有公开的服务调用并不总是明智的选择,因此 PHP 还提供了一种使用对象表示 SOAP 服务的方法。通过使用 addClass() 方法,您可以指定一个类来表示整个 SOAP 服务的函数,其中的所有公共方法将自动公开为服务调用:
class math {
public function add($a, $b) {
return $a + $b;
    }

public function sub($a, $b) {
return $a - $b;
    }
}

$server-addClass("math");

您稍后将看到,该方法是最简洁、最模块化的一个方法。
要完成 SOAP 服务器,您必须指导它处理从连接的 SOAP 客户端传入的任何请求。这是通过 handle() 方法完成的,该方法不需要参数。

总之,用 PHP 创建 SOAP 服务器就像以下示例一样简单:

<?php

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

class math {
public function add($a, $

来源:https://www.tulaoshi.com/n/20160129/1488239.html

延伸阅读
    在Oracle 9i中可以方便的把数据导出为文件,或者从文件导入。通过Oracle的管理服务器(Oracle Management Server,OMS)可以方便的实现,整个操作过程中有很多地方需要解释说明,但是完整的指导资料不多。各大论坛上很多所谓的高手,对该主题的回答往往是,高手是不用OMS的,用exp/impl吧。如果你执意追问,他多半会告诉你...
本周一,甲骨文(Oracle)与Zend公司联合对外宣布,正式推出“Zend Core for Oracle”的beta版本,这是一项将甲骨文的数据库与Zend的PHP开发环境整合为一体的技术。 “Zend Core for Oracle”技术使得PHP的用户能够在Oracle环境下开发应用软件。这两家公司的官方消息称,beta版本现在已经能够通过双方的Web站点下载试用,其最终版本有望在今年...
标签: PHP
  <? //【警告】:未经许可请勿随便修改 //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ //    // 【文件名】:        &...
标签: PHP
四、基于XML_RPC的Web服务 利用XML_RPC构造和使用服务是很方便的。企业为自己提供的各种服务部署XML_RPC服务器,用户、客户软件和客户企业就可以使用这种服务构造出高端服务或者面向最终用户的应用。这种提供更有效、廉价和优质服务的竞争将极大地提高应用服务的质量。 但这里还存在一些问题有待解决,例如怎样编目、索引...
标签: Web开发
  四、基于XML_RPC的Web服务 利用XML_RPC构造和使用服务是很方便的。企业为自己提供的各种服务部署XML_RPC服务器,用户、客户软件和客户企业就可以使用这种服务构造出高端服务或者面向最终用户的应用。这种提供更有效、廉价和优质服务的竞争将极大地提高应用服务的质量。 但这里还存在一些问题有待解决,例如怎样编目、索引、搜索Web...

经验教程

778

收藏

13
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部