2016-08-12 26 views
6

Bir SoapServer'daki bir yönteme erişmek için standart PHP SoapClient'i kullanmaya çalıştığım bir sorun var. Sorun, SoapServer'daki yöntemin iki kez aynı adla listelenmesidir, ancak eylem farklıdır.PHP SoapClient WSAPL modunda SoapAction remaps?

Örneğin: SOAP UI GetStockQuote ve GetStockQuote öğelerini iki kez gösterir, ancak ikinci GetStockQuote aslında GetStockQuoteV2'yi çağırır.

Ancak, PHP SoapClient'im, $ client-> GetStockQuote'u ararsam, otomatik olarak ilkini arar. Araştırmamdan bunun gibi bir şey yapmalıyım.

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

Ama wsdl-modunda olduğum zaman, hala oldukça GetStockQuoteV2 daha GetStockQuote çağırır. Sonuç olarak, wsdl olmayan bir modda çalışmam ve bunun sıkıntılarıyla uğraşmam gerektiğiydi. Wsdl olmayan modda, yukarıdaki __soapCall doğru yöntemi çağırıyor gibi görünüyor, ancak wsdl olmayan modda olduğum için, sunucu ihtiyacı olan uygun bir AuthHeader oluşturmakla ilgili bir sorun olduğunu düşünüyorum.

Sorum, PHP SoapClient wsdl modundayken sabun eylemini yeniden çözebilir miyim?

+0

Uygulama geliştirirken her zaman önbellek devre dışı bırakıldığında sabun istemcisini çalıştırın. $ client = new SoapClient ('http://somewhere.com/?wsdl', dizi ('cache_wsdl' => WSDL_CACHE_NONE)); ve belki de wsdl dosyanızı paylaşın. Ayrıca, devre dışı bırakılmış WS-I uyumluluğuna sahip SOAP ile çalışıyorsanız ve WS-I uyumluluk modunu etkinleştirdiyseniz, hem wsdl dosyaları farklıdır. –

cevap

2

Bu çirkin bir çözümdür, ancak burada gördüğümüz gibi - başka bir tarafta çirkin Sabun servisiniz var. Bunun kaydet

  1. alın WSDL url
  2. (kötü olanlar 1 olmalıdır)

Başka bir çözüm dosyası

  • Ve orada yöntemler sırasını değiştirmek yerel olarak. SoapClient'i ve iç yöntemini genişletebilirsiniz. A aslında bir uzaktan kumanda yöntemini çağırır B.

  • +0

    Evet, SoapClient'teki yöntemin geçersiz kılınması, bu sorunla baş etmenin en temiz yolu gibi görünüyor. Değiştirilmiş bir wsdl'i korumak zorunda kalmak istemem. – Halfstop