随笔 - 47, 文章 - 10, 评论 - 8, 引用 - 0
数据加载中……

PHP5中的SOAP扩展的应用及注意的问题

既然说到SOAP就先对这个有个大概了解吧。

SOAP(简单对象访问协议)定义了客户机与服务器之间传递的消息。消息采用 XML 格式。SOAP 独立于平台、编程语言、网络和传输层。

这次做的项目中需要提供WebService服务,没话说,由于是PHP的项目,首先就按照习惯用了NuSOAP,结果让我郁闷了好久,程序返回的是一个数组,但是用print_r()打印出来是空的,用count()看了一下大小为1,郁闷ing。看了一下response数据是存在的啊。又对照了一下以前做的SOAP(是在PHP4上的),两个response有点不同,这才反应过来是PHP5跟PHP4的版本不一样。

打开php.ini,找到扩展模块那部分,把soap的模块加载上,又重新写了一下Server端和Client端,继续测试。总是出现“looks like we got no XML document”的error。难道是用法错了,手头正好有本《PHP5 Power Programming》找到SOAP的地方,没找到问题,又跑到zend的官方网站上看了一下SOAP的介绍和示例(http://www.zend.com/php5/articles/php5-SOAP.php?out=dynamicwebpages),没错啊。去Google搜索这个错误,最后还是连到了zend的一个blog上(http://www.zend.com/php5/articles/php5-SOAP.php?article=php5-SOAP&kind=php5&id=5085&open=1&anc=0&view=1),前半部分跟上面那个是一样的,直接跳过,看下面的Comment,发现好多人都遇到了这个问题,人提到是在PHP开始标签之前存在blank character,可我的没有啊,我的有个require_once("mainfile.php"),把这句注释掉以后就没问题了,又继续根据mainfile.php追踪下去,发现是在类的文件中PHP结束标签之后有blank character,删除掉就没问题了。

在zend上的comments里还有人提到是XML文件的编码问题,这个我没有测试。终于搞定了这个问题,继续写接口,哎……

郁闷本来想把全部代码贴上来,结果排版会有问题,还是贴些重要的吧!

Server端:

1 $web_service   =   new  SoapServer( null ,   array ( ' uri '   =>   ' ispfcn ' , ' encoding ' => ' gb2312 ' )); 
2 $web_service -> addFunction( " iGetUserList " );
3 $web_service -> addFunction( " iRegisterUser " );
4 $web_service -> addFunction( " iSetUserPwd " );
5 $web_service -> handle();

Client端:
 1try {
 2$opts = array('location' => 'http://192.168.0.56/web_service.php','uri'=>'ispfcn','encoding'=>'gb2312');
 3$client = new SoapClient(null,$opts);
 4$custom_id=1;
 5$custom_name="system";
 6$custom_pwd=md5("system");
 7$custom_flag="sys";
 8$start=0;
 9$limit=0;
10$result = $client->iGetUserList($custom_id,$custom_name,$custom_pwd,$custom_flag,$start,$limit);
11for ($i=0;$i<count($result);$i++){
12    echo sprintf("%4d",$result[$i]['user_id']).":".$result[$i]['username']."";
13    }
14}
15catch (SoapFault $e)
16{
17echo $e->faultcode,' '.$e->faultstring."n";
18}

posted on 2006-04-04 11:03 编程之道 阅读(1681) 评论(1)  编辑 收藏 引用 所属分类: web编程

评论

# re: PHP5中的SOAP扩展的应用及注意的问题  回复  更多评论   

我也遇到了上面的问题 但是还是看不明白你是如何解决的。请具体执教
2009-02-11 18:27 | 翼辉

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理