(一)基于PHP——WSDL的创建(NON-WSDL篇)
分类: WSDL(2)
版权声明:本文为博主原创文章,未经博主允许不得转载。
(谢谢合作!)
花了两天的时间熟悉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
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中添加:
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文件添加:
1. 10.0.18.145 www.mysoapclient.cn
2. 10.0.18.145 www.mysoapservice.cn
注:方便测试,你懂的!
(4)写个index.php文件放到虚拟目录e:/service和e:/client中看是否创建成功!
1. <?php
2. echo "Create OK!"
3. ?>
输入域名:
环境大功告成!
注意:会遇到的问题:虚拟目录指定注意斜杠和反斜杠,写错就麻烦了,还有一个就是修改conf文件的时候,不要修改错哦,如果错了,wamp会告诉你,重启时一直停留在“黄灯”。
3、先实现无WSDL(NON-WSDL)方式。
删除掉service和client目录中的index.php,分别在不同目录中创建文件service.php和client.php。
service.php
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
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访问地址。
注意:常见错误:
O(∩_∩)O哈哈~注意:非常重要,
<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是没有加抛出异常时候的原样。
(1)在service.php中不要包含echo,不然会死的很难看的。
(2)不要包含非法字符。
(3)保存的时候一定要存为UTF-8无BOM.
一番努力后看到了:
2011-11-09
2011-11-09