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 サービスと SOAP があまり得意ではありませんが、アイデアがあれば、私が間違っていることと、PHP5 のネイティブ SOAP に移行する方法について意見をいただければ幸いです。ところで、私がこの動きを最初に望んでいる理由は、ネイティブ ソープで想定されるリソースの節約です。これら2つのソリューション間のベンチマークへのリンクもいただければ幸いです。

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
}

あなたが参照しているバージョンフィールドは「SOAP1.1」または類似のものとして定義されていると思いますか?

幸運をお祈りしています :)

ところで:あなたは何に取り組んでいますか?パイロットから空港への遅延の交換?それとも、Oslでの荷物配達の待ち時間を短縮するWebサービスですか?:p

于 2008-12-03T23:22:15.010 に答える
1

.NET ベースの Web サービスを使用しようとする PHP5 組み込み SOAP クライアントで、非常によく似た問題が発生しました。また、無効なスキーマを報告する WSDL の解析に失敗しました。スキーマ定義を 1 つのローカル ファイルに入れても役に立ちませんでした。

私たちは試すのをあきらめて NuSOAP に切り替えましたが、うまくいきました。

ただし、NuSOAP も完璧にはほど遠いものです。現在、1MB 以上の応答の解析中にメモリ不足の状況に陥っています。厄介なデバッグ コードをすべて消去することで少しは効果がありましたが、根本的に改善されたわけではありません。

したがって、現時点では PHP で 100% 相互運用可能/機能的な SOAP クライアント実装はないようです。

于 2009-02-17T11:38:20.977 に答える
1

テストせずに、2 つの提案があります。

まず、(SoapClient を作成する前に) error_reporting を可能な限り高く設定します。

error_reporting( E_ALL );

サーバー側の認証に問題がある場合、PHP は警告をスローします。ほとんどの場合、何が問題なのかを教えてくれます。

2 番目: 'location' オプションを wsdl への URL と一緒に指定できるかどうかわかりません。理論的には、wsdl は操作のエンドポイントがどこにあるかをクライアントに通知するので、気にする必要はありません。

于 2008-11-30T21:03:08.617 に答える