版权声明:本文为博主原创文章,未经博主允许不得转载。
转载请注明出处:http://blog.youkuaiyun.com/cwt0408/article/details/6952936
(谢谢合作!)
花了两天的时间熟悉WSDL:
基础教程:http://www.w3school.com.cn/wsdl/
转载请注明出处,谢谢合作!
环境:WAMP
1、打开php对SOAP模块的支持,只要在php.ini中将 extension=php_soap.dll 前面的“;”去掉,然后重启apache。


2、建立两个虚拟目录便于调试,并绑定域名。
(1)虚拟目录创建:
现在E盘建立两个目录,service和client
在wamp安装目录中顺着路径C:\wamp\bin\apache\Apache2.2.17\conf\extra,找到httpd-vhosts.conf

- NameVirtualHost 10.0.18.145:80
- <VirtualHost 10.0.18.145:80>
- ServerName www.mysoapclient.cn
- ServerAlias mysoapclient.cn
- DocumentRoot e:/client
- </VirtualHost>
- <VirtualHost 10.0.18.145:80>
- ServerName www.mysoapservice.cn
- ServerAlias mysoapservice.cn
- DocumentRoot e:/service
- </VirtualHost>
(2)修改虚拟目录的权限,在httpd.config中添加:
- <Directory "E:/client/">
- Options Indexes FollowSymLinks
- AllowOverride all
- Order Allow,Deny
- Allow from all
- </Directory>
- <Directory "E:/service">
- Options Indexes FollowSymLinks
- AllowOverride all
- Order Allow,Deny
- Allow from all
- </Directory>
然后重新启动Apache!
(3)修改host文件,在运行中打开C:\WINDOWS\system32\drivers\etc\,打开hosts文件添加:
- 10.0.18.145 www.mysoapclient.cn
- 10.0.18.145 www.mysoapservice.cn
注:方便测试,你懂的!
(4)写个index.php文件放到虚拟目录e:/service和e:/client中看是否创建成功!
- <?php
- echo "Create OK!"
- ?>
输入域名:
环境大功告成!
注意:会遇到的问题:虚拟目录指定注意斜杠和反斜杠,写错就麻烦了,还有一个就是修改conf文件的时候,不要修改错哦,如果错了,wamp会告诉你,重启时一直停留在“黄灯”。
3、先实现无WSDL(NON-WSDL)方式。
删除掉service和client目录中的index.php,分别在不同目录中创建文件service.php和client.php。
service.php
- <?php
- function GetInfo(){
- return date('Y-m-d');
- }
- $soap=new SoapServer(null,array('uri'=>"http://www.mysoapservice.cn/service.php"));
- $soap->addFunction('GetInfo');
- $soap->handle();
- ?>
//浏览器中测试,没有任何东西说明初步成功,
client.php
- <?php
- header('Content-Type:text/html;charset=utf-8');
- try {
- $soap = new SoapClient(null,array('location'=>'http://www.mysoapservice.cn/service.php','uri'=>'http://www.mysoapservice.cn/service.php'));
- echo $soap->GetInfo()."<br>";//调用方法一
- echo $soap->__soapcall("GetInfo",array());//调用方法二
- }catch(SoapFault $e){
- echo "Soap error ".$e->getMessage();
- }catch(Exception $e){
- echo "Exception error ".$e->getMessage();
- }
- ?>
第一个参数还是wsdl,这里为null,
第二个参数中必须包含命名空间(uri),这两个参数都要和需要访问的SoapServer一致,而执行地址(location)为SoapServer的php访问地址。
注意:常见错误:
<a>Soap error looks like we got no XML document
<b>Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document in E:\client\client.php:5 Stack trace: #0 E:\client\client.php(5): SoapClient->__call('GetInfo', Array) #1 E:\client\client.php(5): SoapClient->GetInfo() #2 {main} thrown in E:\client\client.php on line 5
上面两个报错其实是一样的,b是没有加抛出异常时候的原样。
O(∩_∩)O哈哈~注意:非常重要,
(1)在service.php中不要包含echo,不然会死的很难看的。
(2)不要包含非法字符。
(3)保存的时候一定要存为UTF-8无BOM.

一番努力后看到了:
2011-11-09
2011-11-09
本文介绍如何在 PHP 环境下通过 WAMP 构建无 WSDL (NON-WSDL) 的 SOAP 服务及客户端。主要内容包括:配置 PHP 对 SOAP 模块的支持,设置虚拟目录和域名绑定,以及创建 SOAP 服务端和客户端的具体步骤。
150

被折叠的 条评论
为什么被折叠?



