3

SOAP ソリューションで問題が発生しています。時々、次のようなエラーが表示されます。

Function (functionA) is not a valid method for this service

編集 8 か月後 問題の原因は特定できませんでしたが、回避できました。APIから応答を受け取るたびに、SoapFaultをチェックし、別の同じ要求を送信して、2回目に返された回答を使用します.(回答として投稿)

これは、次のような PHP からの呼び出しで発生します。

functionA() - expected response
functionA() - expected response
functionA() - SoapFault
functionA() - expected response

上記のすべての呼び出しで同じ結果が期待され、同じパラメーターが使用されます (存在する場合)。ほとんどすべての呼び出しで正常に機能しているため、関数と対応する WSDL がそこにあることがわかります。

私が問題だと思ったのは、その機能を持たない古いバージョンをキャッシュすることでした。私はキャッシングを無効にしようとしました:

ini_set("soap.wsdl_cache_enabled", "0");

Zend_SoapClient を使用するときは、すべての呼び出しにランダムなダミー パラメータを追加し、それを無効にします。

'cache_wsdl' = false

誰かが私を何らかの方向に向けるか、何が原因であるかについて直接的な提案をしてくれることを願っています.

私のコードは次のようになります:

public function __construct()
{
        $wsdl =  "http://catlovers.nl/index.php?wsdl&dummy=".rand(1000,9999);

        $this->_client = new Zend_Soap_Client($wsdl, array(
            'soapVersion' => SOAP_1_1,
            'cache_wsdl' => false 

        ));
        $this->_client->setWsdlCache(false);
}

function __call($name, $arguments) // Calls are made this way
{
    array_unshift($arguments, $this->_apiKey, $this->_user, $this->_password);
    return call_user_func_array(array($this->_client, $name), $arguments);
}
public function getCat()
{
    return ($this->__call('getCat',array()));
}

「反対側」で私は持っています:

$server = new nusoap_server();

$server->wsdl->addComplexType('Cat', ....

$server->register( 'getCat', return Cat ...

function getCat($apikey, $email, $password)
{
  $cat = $db->get("redCat");
  return $cat;
}
4

3 に答える 3

3

まず、組み込みSoapClientクラスを使用して関数を呼び出し、デバッグ情報を出力してみます。

$wsdl =  "http://abcd.com/index.php?wsdl&dummy=".rand(1000,9999);
$soap = new SoapClient($wsdl, array(
   'cache_wsdl' => WSDL_CACHE_NONE,
   'trace' => true,
));

try {
    var_dump($soap->functionA());
} catch ( Exception $ex ) {
    var_dump($ex);
}
var_dump($soap->__getLastRequest());
var_dump($soap->__getLastRequestHeaders());
var_dump($soap->__getLastResponse());
var_dump($soap->__getLastResponseHeaders());

これで、どこに問題があるかがわかります。すべてが常に問題ない場合、問題は Zend のクラスにあります。そうでない場合は、どのサービスが応答するかを調べます。サーバー側で何らかのエラーが発生したか、そのような ID でのダミー生成が失敗した可能性があります

于 2013-02-26T09:08:20.877 に答える
1

あなたの問題は nusoap に関連していると思います。なぜなら、私は長年 PHP SOAP サーバー/クライアントを使用しており、この問題に直面したことがないからです。(しかし、私はいつもnusoap libで奇妙な問題を抱えていました)

現在私はjool.nl Web サービス ヘルパーを使用しています。これは非常に強力でありながらきちんとしたオブジェクト指向ライブラリであり、コーディングをより簡単かつクリーンにするだけでなく、Web サービス設計へのオブジェクト指向アプローチも提供します。また、ドキュメント付きの Web サービス用の優れた Web インターフェイスも提供します。

このライブラリは内部の PHP SOAP サーバーを使用するため、問題が解消されると確信しています。

試してみることをお勧めします。このライブラリを使用して最初の Web サービスを作成する場合、他のことを試みることはないと確信しています。

これがお役に立てば幸いです。

于 2013-02-27T19:51:50.930 に答える