2012-10-10 2 views
0

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); 

$resultNULL입니다.

저는 아이디어가 부족하여 누군가가이 수수께끼를 푸는데 도움이되기를 바랍니다.

나는 웹 서비스를 소비하기 위해 SoapUI를 시도했지만 결과는 같습니다.

+0

괜찮습니까. 이것은 어리석은 일이지만 서버 측에 "pi"라는 실제 함수가 있습니까? – Ivica

+0

php.net/pi, 내장 함수입니다 :) –

+0

오른쪽 :) "pi()"또는 비슷한 것으로 포장하고 앞에 기본 경고/에코/무언가를 추가하는 것이 좋습니다. , 적어도 서버 측에서 클라이언트로부터 코드가 호출되고 있는지 확인할 수 있습니다 (즉, 요청이 서버에서 올바른 위치에 도착하는지 확인할 수 있습니다). 또한, Zend_Soap_AutoDiscover는 PHP docblocks를 사용하여 비누를 통해 반환 할 데이터 유형을 결정합니다. 아마도 pi()가 그다지 잘 설명되지 않았습니까? 아마도 "pi()"의 반환 값은 일부 비누 봉투에 싸여 있거나 일부 stdclass 또는 다른 것으로 제시되어야합니다 ... 그냥 큰 소리로 생각하고 ... – Ivica

답변

0

아마도이 문제를 발견했습니다. 귀하의 투표에 맞는지 확인하고보고하십시오. 나는이 방법으로, 옵션이 아닌 기본 URI 매개 변수를 사용하여 비누를 호출하는 방식을 변경 : 당신이 WSDL을 호출하는 경우

try{ 
     // initialize SOAP client 
     $options = array(
       'location' => 'http://localhost/experiments/soap/server.php', 
       'uri'  => 'http://localhost/experiments/soap/server.php' 
     ); 

     $client = new Zend_Soap_Client(null, $options); 
     $result = $client->pi(); 
     Zend_Debug::dump($result); 

    }catch(SoapFault $e){ 
     Zend_Debug::dump($e); 
     echo $e->getMessage(); 
    } 
} 

클라이언트는 방법 "() 파이"를 호출 할 수 없습니다. 그것을 시도하고 알려주세요.

감사합니다.

관련 문제