分类:
2008-04-14 17:55:45
创建由Oracle驱动的SOAP服务》
用PHP创建SOAP客户端
前面已经说明了如何使用 PHP 创建 SOAP 服务,下面我们来看一下如何创建 SOAP 客户端,以供您的服务器与之通信。
尽管使用 PHP SOAP 实施通过 SOAP 执行远程过程调用的方法有很多,但我们建议的方法是使用 WSDL 文档。您已经生成了该文档以使 SOAP 服务运行,因此该文档已经存在。
要使用 PHP 创建 SOAP 客户端,您必须创建一个 SoapClient 类的实例,该类具有以下构造函数:
$client = new SoapClient($wsdl [, $options]);
对于 SoapServer 类,$wsdl 参数是要访问服务的 WSDL 文档的位置,可选参数 $options 是配置客户端连接的一组键/值对。以下是一些可用选项(请参见 以获得完整列表):
soap_version:要使用的 SOAP 协议版本,其值为常量 SOAP_1_1 或 SOAP_1_2
login:如果在 SOAP 服务器上使用 HTTP 身份验证,这是要使用的登录名
password:如果在 SOAP 服务器上使用 HTTP 身份验证,这是要使用的密码
proxy_host:如果通过代理服务器连接,这是服务器的地址
proxy_port:如果通过代理服务器连接,这是代理监听的端口
proxy_login:如果通过代理服务器连接,这是登录时使用的用户名
proxy_password:如果通过代理服务器连接,这是登录时使用的密码
local_cert:如果连接到一个通过安全 HTTP (https) 通信的 SOAP 服务器,这是本地认证文件的位置
passphrase:与 local_cert 结合使用,以提供认证文件的密码短语(如果有)
compression:如果设置为 true,PHP 将尝试使用压缩的 HTTP 请求与 SOAP 服务器通信
classmap:将 WSDL 数据类型映射到 PHP 类以便在客户端使用的一组键/值对
如果 PHP 中的 SOAP 客户端通过 WSDL 文档实例化,就可以使用返回的客户端调用在 SOAP 服务器上公开的方法(就好像它们是自带 PHP 调用),并处理任何可能作为原生 PHP 异常发生的 SOAP 错误。例如,返回到原始 math SOAP 服务示例,以下是一个完整的 PHP SOAP 客户端:
$client = new SoapClient(“”);
try {
$result = $client->div(10,rand(0,5); // will cause a Soap Fault if divide by zero
print “The answer is: $result”;
} catch(SoapFault $f) {
print “Sorry an error was caught executing your request: {$e->getMessage()}”;
}
?>
正如您看到的那样,使用 SoapClient 类访问 SOAP 服务(无论它们是否在 PHP 中实施)很简单。实际上,通过 SOAP 服务为您的书籍创建一个基于 Web 的管理系统是件轻而易举的事!如下所示,与让查询接口直接与 SOAP 服务交互相比,开发这个简单查询接口的逻辑和界面明显需要更多的编码工作。
$client = new SoapClient("bookman.wsdl");
try {
switch(@$_GET['mode']) {
case 'title':
if(!empty($_GET['title'])) {
$isbns = $client->findBookISBNByTitle($_GET['title']);
} else {
print "Error: You must specify at a title fragment!BR/>";
}
break;
case 'author':
if(!empty($_GET['author'])) {
$isbns = $client->findBookISBNByAuthor($_GET['author']);
} else {
print "Error: You must specify the author to search!
";
}
break;
default:
$isbns = $client->listAllBooks();
}
print "
ISBN | Author | ";Title | Price |
No Results Available | |||
{$details['ISBN']} | {$details['AUTHOR']} | ";{$details['TITLE']} | {$details['PRICE']} | ";
?>
Display All Books |
在执行时,这将通过 PHP 驱动的 Web 服务为 Oracle 数据库提供一个难看但功能完善的界面。
结论
现在,您应该具备了所有必备知识,可以使用 Oracle 支持的数据库,并将它们与 PHP 中的 SOAP 功能相结合,以创建强大的 Web 服务。随着 的演化越来越接近神奇的 Web 2.0,这些服务构成了面向服务体系结构的重要部分,也成为了丰富的 Internet 客户端体验的一个特点。尽管我们没有涵盖 PHP 中的 SOAP 功能的每个细节,但我们只忽略了仅在很少情况下(例如,不使用 WSDL 文档连接到服务)可用的那些功能。