Board logo

标题: 使用 Ajax 和 Web 服务(2) [打印本页]

作者: look_w    时间: 2018-9-19 20:10     标题: 使用 Ajax 和 Web 服务(2)

部署简单的 Web 服务使用 PHP 创建简单的 Web 服务。PHP 以及 NuSOAP,是我见过的快速创建 Web 服务最简单的方法。            
首先,确认取得 NuSOAP(查看 ),将所有的 PHP 文件放在部署 PHP Web 服务的文件夹下。            
安装完 NuSOAP 后,就可以开始编写实际 Web 服务。清单 1 包含所有内容。            
清单 1. webservice.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
require_once('nusoap.php');
$server = new soap_server;
$server->register('hello');
$server->register('retrieveByType');
function hello($name) {
    return 'Hello, ' . $name;
}

function retrieveByType($type) {
    if ($type == 'trolling') {
        $arr[0] = 'Donzai Deep Swimmer 5 1/4 inch';
        $arr[1] = 'Yosubi Squid-like 4 inch';
        $arr[2] = 'Fortunata Imperial High Action';
    } else if ($type == 'casting') {
        $arr[0] = 'Silver Spring Mirrors Size 00';
        $arr[1] = 'Gold Spring Mirrors Size 0';
        $arr[2] = 'Mini Minnow Blue';
    } else {
        $arr[0] = 'None found!';
    }

    return $arr;
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>




首先,注意 require_once('nusoap.php') 行。这一行允许 PHP Web 页面使用 nusoap.php 中定义的类。您也许想知道为何需要 NuSOAP 相关的其他 PHP 文件。实际情况是,nusoap.php 依赖于这些文件,就像页面依赖 nusoap.php。            
下一行实例化 soap_server 对象。不出所料,这将创建使用 SOAP 协议的 Web 服务。            
下一行注册 retrieveByType 函数以将其公开为 Web 服务操作。如果再往下看,会发现有个已定义函数,名为 retrieveByType。那么为什么需要这一步? 因为如果不注册该函数,它只是可供包含它的本 PHP 页面或其他 PHP 页面调用的简单 PHP 函数。因此本行是通知 soap_server 对象将该函数公开为 Web 服务用户可用的操作。            
下一段代码实际是实现 retrieveByType 方法。这是个简单的 PHP 函数,接收一个参数:type,它可以是 trolling、casting 或 other。如您所知,这些是 fishinhole.com 用户选的三个鱼饵类型。            
retrieveByType 方法返回数组。数据包含请求类型特定的鱼饵列表。现在对 trolling 有三种不同鱼饵类型,casting 有三种不同鱼饵类型。注意还有一种 “全部包含”,其中有 Other 和未识别类型。对于这些 Web 服务只简单返回 None Found! 作为数组惟一元素。            
最后两行在 Web 服务被访问时执行。第一行检查是否有 POST 数据。如果没有,POST 数据设为空字符串。第二行用来自 POST 的数据执行 Web 服务。POST 数据包含 SOAP 消息。当查看使用者的时候将会看到更多。            
将该页面保存为 webservice.php 并放到安装 NuSOAP 的文件夹下。显然,需要将该页面放到能处理 PHP 文件的地方。目前大多数托管解决方案支持 PHP,所以即使没有现成的 PHP 处理器,也不会有问题。            
现在通过访问以下 URL 快速测试 Web 服务:http://yourhost/yourdirectory/webservice.php。显然,需要将 yourhost 和 yourdirectory 分别用实际存放文件的主机和文件夹替换。            
得到的响应应该是 SOAP 响应(查看清单 2)。如果不是,则 Web 服务运行不正常。            
清单 2. SOAP 响应
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="ISO-8859-1" ?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
<faultactor xsi:type="xsd:string" />
<faultstring xsi:type="xsd:string">method '' not defined in service</faultstring>
<detail xsi:type="xsd:string" />
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0