PHP SOAP Server hata - bir sınıf fonksiyonlar ekleyerek

3 Cevap php

Ben bir SOAP sunucu yazıyorum ve garip bir sorun vurdu.

İşte server.php gelen alakalı satırlar var

class MyHandler {
    public function __construct() { ... }
    public function __wakeup() { ... }

    public function getPrice() { ... }
}

$server = new SoapServer("my.wsdl", array("soap_version" => SOAP_1_2));

$server->setClass('MyHandler');
$server->addFunction("getPrice");
$server->handle();

(PHP 5.3) lokal olarak bu test gayet iyi çalışıyor ve istekleri göndermek ve yanıtları almak mümkün değilim.

Benim geliştirme sunucusu (PHP 5.2.9) üzerine bu koyduğunuzda, ben bu hata mesajını alıyorum:

SoapServer::addFunction(): Tried to add a non existant function 'getPrice'

Apart onlar büyü değil ki aslında, bu çok kafa karıştırıcı.

O zamandan beri bu addFunction() satırını değiştirerek soruna idare ettik:

$server->addFunction(SOAP_FUNCTIONS_ALL);

... Ve iyi çalışıyor! Tabii ki, $server->getFunctions() bu __construct() ve benim de sınıftan __wakeup() fonksiyonları, iyi bir şey gibi görünmüyor hangi ekler gösterir incelenmesi.

Yanlış ne yaptım? Halı bomba burada tek yolu yaklaşım "tüm fonksiyonlar eklemek" mı?

3 Cevap

Kullanımı addFunction() Bir sınıfın dışında, kendi getPrice() adında bir işlev aramak için söyler. Bu nedenle hataya neden olan, yok.

addClass() otomatik olarak MyHandler tüm fonksiyonlarını katacak kullanarak, böylece addFunction() aramak gerekmez, getPrice() zaten olmalıydı ilave edildi.

http://bugs.php.net/bug.php?id=47919: Ayrıca, orada kullanarak bir sınıf yöntemi ekleyerek yolu yok addFunction() belirtmek görünüyor bugs.php.net üzerine (PHP 5.2.9 için) açık bilet var

Ben şeyler korkarım değişmiş olabilir ama nasıl PHP 5.3 erişimi yok, çok emin değil ...

Hmm, emin neden PHP 5.3 üzerinde çalışıyor, ama anladığım kadarıyla, SoapServer::setClass() verilen sınıfındaki tüm yöntemleri (yani, getPrice() yöntemi olduğu kullanarak ihraç edilecek) ihracat .

SoapServer::addFunction() iyi fonksiyonları ile özel olarak çalışır. Herhangi bir şansın bir sokak getPrice() fonksiyon yerel ortamda ortalıkta vardı?

Hala "MyHandler" dan ihraç yöntemler göstermelidir addFunction() çağrıyı dışarı yorum ile bu test edebilirsiniz.

Eğer setClass() aslında nedense tüm PHP fonksiyonları ihracat çağrı kaldırmak gibi SOAP_FUNCTIONS_ALL, muhtemelen kötü bir fikir kullanma ...

$server->addFunction(array("SOAPMethods", "getPrice"));