(一)基于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