Zend_Soap_Server를 사용하여 Soap Server를 설정하려고했지만 작동하지 못했습니다.
나는 몇 가지 다른 환경을 시도했다 : nginx와 아파치 리눅스 VM, 윈도우, PHP 5.3 및 PHP 5.4 아파치에, 모두 동일한 결과를 얻을 수 있습니다.(Zend) Soap Server가 결과를 반환하지 않습니다.
Zend_Soap_Autodiscover를 사용하면 올바르게 wsdl이 생성됩니다. 해당 wsdl SoapClient 피드 및 메서드를 호출 할 때 응답을 반환하지 않습니다. SoapServer :: handle()이 호출 된 후 php가 멈춘 것처럼 보입니다.
이
는 서버의 일부입니다ini_set('soap.enable_wsdl_cache', 0);
require_once 'Zend/Soap/AutoDiscover.php';
require_once 'Zend/Soap/Server.php';
if (isset($_GET['wsdl'])) {
handleWsdl();
} else {
handleSoap();
}
function handleWsdl() {
$autodiscover = new Zend_Soap_AutoDiscover();
$autodiscover->addFunction('pi');
$autodiscover->handle();
}
function handleSoap() {
$soap = new Zend_Soap_Server('http://localhost/experiments/soap/server.php?wsdl');
$soap->setWsdlCache(false);
$soap->addFunction('pi');
$soap->handle();
}
그리고 이것은 클라이언트입니다 :
ini_set('soap.enable_wsdl_cache', 0);
$wsdl = 'http://localhost/experiments/soap/server.php?wsdl';
$client = new SoapClient($wsdl, array('trace' => 1));
$result = $client->pi();
var_dump($result);
$result
이 NULL
입니다.
저는 아이디어가 부족하여 누군가가이 수수께끼를 푸는데 도움이되기를 바랍니다.
나는 웹 서비스를 소비하기 위해 SoapUI를 시도했지만 결과는 같습니다.
괜찮습니까. 이것은 어리석은 일이지만 서버 측에 "pi"라는 실제 함수가 있습니까? – Ivica
php.net/pi, 내장 함수입니다 :) –
오른쪽 :) "pi()"또는 비슷한 것으로 포장하고 앞에 기본 경고/에코/무언가를 추가하는 것이 좋습니다. , 적어도 서버 측에서 클라이언트로부터 코드가 호출되고 있는지 확인할 수 있습니다 (즉, 요청이 서버에서 올바른 위치에 도착하는지 확인할 수 있습니다). 또한, Zend_Soap_AutoDiscover는 PHP docblocks를 사용하여 비누를 통해 반환 할 데이터 유형을 결정합니다. 아마도 pi()가 그다지 잘 설명되지 않았습니까? 아마도 "pi()"의 반환 값은 일부 비누 봉투에 싸여 있거나 일부 stdclass 또는 다른 것으로 제시되어야합니다 ... 그냥 큰 소리로 생각하고 ... – Ivica