【问题标题】:Moving from NuSOAP to PHP5 SOAP从 NuSOAP 迁移到 PHP5 SOAP
【发布时间】:2008-11-26 23:20:43
【问题描述】:

我一直在使用依赖于 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 中迁移到本机肥皂的意见。顺便说一句,我首先希望这一举措的原因是假定在本地肥皂中节省资源。我也很感谢这两个解决方案之间的基准测试链接。

【问题讨论】:

    标签: php soap wsdl port nusoap


    【解决方案1】:

    确保 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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        不做测试,我有两个建议:

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

        error_reporting( E_ALL );
        

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-04
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 2020-08-07
          相关资源
          最近更新 更多