6

我一直在使用依赖于 NuSOAP 的 PHP4 编写脚本。现在,我正在尝试将其移至 PHP5,并在那里使用对 SOAP 的内置支持。

$wsdlPath = "";    // I have obviously set these variables to something meaningful, just hidden for the sake of security
$apiPath = "";
$username = "";
$password = "";

// PHP5 style
$client = new soapclient($wsdlPath, array('login'=>username,                
'password'=> $password,
'soap_version'=> SOAP_1_2,
'location'=> $apiPath,
 'trace'=> 1));

// PHP4/NuSOAP style
$client = new soapclient($wsdlPath, true);  
client->setEndpoint($apiPath);                          
$client->setCredentials($username, $password);
$client ->loadWSD);

PHP5 版本抛出以下异常堆栈跟踪:

EXCEPTION=SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://external-nbb.napi.norwegian.no.stage.osl.basefarm.net/api/napi1300?wsdl' in /home/eisebfog/public_html/database/norwegian.php:31
Stack trace:
#0 /home/eisebfog/public_html/database/norwegian.php(31): SoapClient->SoapClient('http://external...', Array)
#1 /home/eisebfog/public_html/database/index.php(53): require_once('/home/eisebfog/...')
#2 {main}

现在,NuSOAP 版本确实可以工作,而纯 PHP5 则不行——不需要脑外科医生就可以发现我做错了什么。我可以访问 .htaccess 文件,并通过 phpinfo() 确保我正在正确运行 NuSOAP 并在我应该运行 PHP5 时运行 PHP4/Nusoap。

基本上,我对 Web 服务和肥皂不是很好 - 但如果有人有任何想法,我将不胜感激任何关于我做错了什么以及如何在 PHP5 中迁移到本机肥皂的意见。顺便说一句,我首先希望这一举措的原因是假定在本地肥皂中节省资源。我也很感激这两个解决方案之间的基准测试链接。

4

3 回答 3

2

确保 NuSoap 和 PHPv5-SOAP 在同一台服务器上运行。如果我没有完全错,两个库都使用相同的类名。如果您确保不包含 NuSopa 文件,它可能会更好地工作?还要验证 SOAP 库是否已加载:

if(!extension_loaded('soap')){
  dl('soap.so'); // Actually a deprecated method. See "notes" at http://no.php.net/dl
}

我猜你提到的版本字段被定义为“SOAP 1.1”或类似的?

最良好的祝愿 :)

顺便说一句:你在做什么?交换从飞行员到机场的延误?或者也许是一种网络服务,可以减少在 Osl 运送行李的等待时间?:p

于 2008-12-03T23:22:15.010 回答
1

在没有测试的情况下,我有两个建议:

首先,将您的 error_reporting 设置为尽可能高(在创建 SoapClient 之前):

error_reporting( E_ALL );

如果服务器端的身份验证有问题,PHP 会抛出警告。在大多数情况下,它会告诉您出了什么问题。

第二:我不知道您是否可以将“位置”选项与 wsdl 的 URL 一起指定。从理论上讲,wsdl 会告诉您的客户端,操作的端点在哪里,因此您不必费心。

于 2008-11-30T21:03:08.617 回答
1

我们在 PHP5 内置 SOAP 客户端尝试使用基于 .NET 的 Web 服务时遇到了非常相似的问题。此外,WSDL 解析失败报告无效模式。将架构定义放入单个本地文件没有帮助。

我们放弃了尝试,改用 NuSOAP,它确实有效。

然而,NuSOAP 也远非完美。现在我在解析 1MB+ 响应时遇到内存不足的情况。删除所有讨厌的调试代码有一点帮助,但不是彻底。

因此,目前 PHP 中似乎没有 100% 可互操作/功能性的 SOAP 客户端实现。

于 2009-02-17T11:38:20.977 回答