2016-08-12 5 views
6

Ich habe ein Problem, wo ich versuche, den Standard PHP SoapClient zu verwenden, um auf eine Methode auf einem SoapServer zuzugreifen. Das Problem besteht darin, dass die Methode auf dem SoapServer zweimal mit demselben Namen aufgeführt wird, die Aktion jedoch anders ist.PHP SoapClient Remap SoapAction im WSDL-Modus?

Zum Beispiel: SOAP UI zeigt GetStockQuote und GetStockQuote zweimal aufgeführt, aber das zweite GetStockQuote wird tatsächlich GetStockQuoteV2 aufrufen.

Aber meine PHP SoapClient, wenn ich $ client-> GetStockQuote aufrufen, wird es automatisch die erste aufrufen. Aus meiner Forschung muss ich stattdessen so etwas machen.

$client->__soapCall('GetStockQuote', array($request), array('soapaction'=>'GetStockQuoteV2')); 

Aber wenn ich in wsdl-Modus bin, ruft sie noch GetStockQuote statt GetStockQuoteV2.

Meine Schlussfolgerung war, dass ich im Nicht-WSDL-Modus laufen und mit den Ärgernissen davon umgehen muss. Im Nicht-WSDL-Modus scheint der obige __soapCall die richtige Methode aufzurufen, aber da ich im Nicht-WSDL-Modus bin, glaube ich, dass es ein Problem beim Erstellen des entsprechenden AuthHeaders gibt, den der Server benötigt.

Meine Frage ist, kann ich die Soap-Aktion in PHP SoapClient wsdl-Modus neu zuordnen?

+0

immer Soap-Client mit Cache deaktiviert beim Entwickeln von App ausführen. $ client = new SoapClient ('http://somewhere.com/?wsdl', Array ('cache_wsdl' => WSDL_CACHE_NONE)); und vielleicht teilen Sie Ihre WSDL-Datei. Wenn Sie mit SOAP mit deaktivierter WS-I-Kompatibilität arbeiten und den WS-I-Kompatibilitätsmodus aktiviert haben, unterscheiden sich beide WSDL-Dateien. –

Antwort

2

Es ist eine hässliche Problemumgehung, aber wie wir hier sehen - Sie haben hässlichen Soap-Service auf einer anderen Seite.

  1. Nehmen WSDL URL
  2. speichern es als lokale Datei
  3. Und es Methoden, um ändern (die schlechte sollte 1. sein)

Eine andere Lösung. Sie können SoapClient und Inside-Methode A tatsächlich Remote-Methode B aufrufen.

+0

Ja, das Überschreiben der Methode im SoapClient scheint der sauberste Weg zu sein, um mit diesem Problem umzugehen. Ich würde nicht wünschen, ein modifiziertes wsdl zu behalten. – Halfstop