从NuSOAP迁移到PHP5 SOAP

时间:2008-11-26 23:20:43

标签: php soap wsdl port nusoap

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

$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时运行PHP5 / Nusoap。

基本上,我对网络服务和肥皂并不是很好 - 但如果有人有任何想法,我会很感激我对错误以​​及如何在PHP5中使用本地肥皂的任何意见。顺便说一下,我首先想要这一举动的共鸣是假定的本地肥皂资源节约。我也很欣赏这两种解决方案之间的基准测试链接。

3 个答案:

答案 0 :(得分: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”还是类似?

祝福:)

顺便问一下:你在做什么?从飞行员到机场的交换延误?或者也许是一个减少奥斯陆行李托运等待时间的网络服务? :P

答案 1 :(得分:1)

没有测试,我有两个建议:

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

error_reporting( E_ALL );

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

第二:我不知道你是否可以指定'location'选项和wsdl的URL。从理论上讲,wsdl会告诉您的客户端操作的端点在哪里,因此您不必费心。

答案 2 :(得分:1)

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

我们放弃了尝试并切换到NuSOAP,这确实有效。

然而,NuSOAP也远非完美。现在,在解析1MB +响应期间,我遇到了内存不足的情况。擦除所有讨厌的调试代码有点帮助,但不是根本。

因此,看起来目前在PHP中没有100%可互操作/功能的SOAP客户端实现。