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

转载请注明出处:http://blog.csdn.net/cwt0408/article/details/6952936
(谢谢合作!)

花了两天的时间熟悉WSDL:
基础教程:http://www.w3school.com.cn/wsdl/
转载请注明出处,谢谢合作!

环境:WAMP

1、打开php对SOAP模块的支持,只要在php.ini中将 extension=php_soap.dll 前面的“;”去掉,然后重启apache。
(一)基于PHP——WSDL的创建(NON-WSDL篇)_第1张图片(一)基于PHP——WSDL的创建(NON-WSDL篇)_第2张图片
2、建立两个虚拟目录便于调试,并绑定域名。
    (1)虚拟目录创建:
现在E盘建立两个目录,service和client
        在wamp安装目录中顺着路径C:\wamp\bin\apache\Apache2.2.17\conf\extra,找到httpd-vhosts.conf(一)基于PHP——WSDL的创建(NON-WSDL篇)_第3张图片(一)基于PHP——WSDL的创建(NON-WSDL篇)_第4张图片

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!"
?>


输入域名:
(一)基于PHP——WSDL的创建(NON-WSDL篇)_第5张图片
环境大功告成!

注意:会遇到的问题:虚拟目录指定注意斜杠和反斜杠,写错就麻烦了,还有一个就是修改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.


(一)基于PHP——WSDL的创建(NON-WSDL篇)_第6张图片

一番努力后看到了:
2011-11-09
2011-11-09

你可能感兴趣的:(apache,PHP,exception,service,SOAP,extension)