使用nusoap时需要注意的地方, 说不定你正被这些问题困扰着

公司的项目用到了nusoap。也确实碰到了timeout的问题。正好search到这篇文章,于是转了。。。

原来做web service用的是pear的soap包, 最近换了公司后改成用nusoap了, 所以对nusoap也算比较熟悉了. 在用的过程中发现有些地方需要注意一下, 所以本文不说nusoap的使用方法, 只说一些需要注意的地方.

nusoap这个类变态的长, 所以一般鲜有人会先把他看一遍再开始用, 大多直接参照例子就开始用了. 我也是这样的, 当然刚开始是没问题的, 程序运行的很好, 但是到从试验性的使用到真正的和别的公司web service传输数据的时候就有问题了, 然后传输大量数据的时候又出现了新的问题.

下面就来说说.

首先在传输少量数据的时候, 用如下语句生成对象
$client = new soapclient($service_address, true);
然后用如下语句调用对方web service的方法就行了
$result = $client->call('methodName', $par);

当然这个在我本机测试时是好的, 也就是我自己写的client端调用自己写的service端是好的. 但是当我用这个调用对方.NET的service端时就出问题了. 数据传不过去. 后来发现原来要用proxy.
在生成$client对象后调用如下方法
$proxy = $client->getProxy();
然后调用对方web service的语句改成
$result = $proxy->methodName($par);
就可以了.

下面那个使用proxy的方法我后来自己请求自己也测试通过, 就是说用proxy比较好, 至少都能用.

这个问题解决后, 测试了几天, 然后需要做load testing了, 几千条的数据一起测, 结果数据传输就掉了很多, 一查, 原来web service中途停了. 所以把php.ini的max_execution_time调长, memory_limit调大, 为了保险, 把max_input_time也调长了. 结果执行结果还是老样子. 所以只好回头研究nusoap类里的东西, 然后发现了$response_timeout这个东西, 默认是30, 我把他改成了900, 估计是900秒, 然后再次执行, OK了. 当然为了保险, 我把nusoap里的所有$response_timeout的值都改为了900 ^^

然后和$response_timeout类似的, 还有一个问题, 就是中文字符的问题. 其实这个很简单, 只要把nusoap里的三个$decode_utf8的值都改成false就可以了. 原来是true, nusoap会自己把utf-8编码的字符转换成iso-8859-1, 所以中文的就变成问号了.

还有一个问题, 如果我为了安全, 把放有web service的目录用htaccess保护起来的话, client端当然也就访问不到service端了. 所以我做了下research, 又发现nusoap里有一个现成的方法. 所以说有时间还是要把nusoap这个类里的东西熟悉熟悉啊, 虽然长了点.
就是下面这个方法,
$client -> setCredentials('username', 'password');
另外请求的service端的地址也要稍作修改
比如原来的地址是

http://domain/test/service.php?wsdl

现在也要改成

http://username:password@domain/test/service.php?wsdl

必须要这两步都做了才能请求被htaccess保护起来的service地址, 缺一不可.

好了,我遇到的问题就这些了, 希望能对各位也用nusoap的朋友有点帮助, 如果还有不清楚的, 请留言提问, 谢谢 ;)

from:http://blog.csdn.net/mynamesucks/archive/2006/05/26/756480.aspx

Leave a comment

0 Comments.

Leave a Reply


[ Ctrl + Enter ]

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word