(一)基于PHP——WSDL的创建(NON-WSDL篇)

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

(一)基于PHP——WSDL的创建(NON-WSDL篇)

标签: phpexceptionsoapapacheextensionservice
  1879人阅读  评论(2)  收藏  举报
  分类:
 

转载请注明出处: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

[html]  view plain  copy
  1. NameVirtualHost 10.0.18.145:80  
  2.   
  3.   
  4. <VirtualHost 10.0.18.145:80>   
  5. ServerName www.mysoapclient.cn    
  6. ServerAlias mysoapclient.cn   
  7. DocumentRoot e:/client  
  8. </VirtualHost>   
  9.   
  10.   
  11. <VirtualHost 10.0.18.145:80>   
  12. ServerName www.mysoapservice.cn  
  13. ServerAlias mysoapservice.cn  
  14. DocumentRoot e:/service  
  15. </VirtualHost>   


(2)修改虚拟目录的权限,在httpd.config中添加:
[html]  view plain  copy
  1. <Directory "E:/client/">  
  2. Options Indexes FollowSymLinks   
  3. AllowOverride all   
  4. Order Allow,Deny   
  5. Allow from all   
  6. </Directory>  
  7.   
  8.   
  9. <Directory "E:/service">  
  10. Options Indexes FollowSymLinks   
  11. AllowOverride all   
  12. Order Allow,Deny   
  13. Allow from all   
  14. </Directory>  


然后重新启动Apache!

(3)修改host文件,在运行中打开C:\WINDOWS\system32\drivers\etc\,打开hosts文件添加:
[html]  view plain  copy
  1. 10.0.18.145 www.mysoapclient.cn  
  2. 10.0.18.145 www.mysoapservice.cn  


注:方便测试,你懂的!
(4)写个index.php文件放到虚拟目录e:/service和e:/client中看是否创建成功!
[html]  view plain  copy
  1. <?php  
  2. echo "Create OK!"  
  3. ?>  


输入域名:

环境大功告成!

注意:会遇到的问题:虚拟目录指定注意斜杠和反斜杠,写错就麻烦了,还有一个就是修改conf文件的时候,不要修改错哦,如果错了,wamp会告诉你,重启时一直停留在“黄灯”。

3、先实现无WSDL(NON-WSDL)方式。
     删除掉service和client目录中的index.php,分别在不同目录中创建文件service.php和client.php。
service.php

[html]  view plain  copy
  1. <?php  
  2. function GetInfo(){  
  3. return date('Y-m-d');  
  4. }  
  5. $soap=new SoapServer(null,array('uri'=>"http://www.mysoapservice.cn/service.php"));  
  6. $soap->addFunction('GetInfo');  
  7. $soap->handle();  
  8. ?>  



//浏览器中测试,没有任何东西说明初步成功,
client.php
[html]  view plain  copy
  1. <?php  
  2. header('Content-Type:text/html;charset=utf-8');  
  3. try {  
  4. $soap = new SoapClient(null,array('location'=>'http://www.mysoapservice.cn/service.php','uri'=>'http://www.mysoapservice.cn/service.php'));  
  5. echo $soap->GetInfo()."<br>";//调用方法一  
  6. echo $soap->__soapcall("GetInfo",array());//调用方法二  
  7. }catch(SoapFault $e){  
  8. echo "Soap error ".$e->getMessage();  
  9. }catch(Exception $e){  
  10. echo "Exception error ".$e->getMessage();  
  11. }  
  12. ?>  



第一个参数还是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值