Zend Framework 2.0 で SOAP コンポーネントを使用すると問題が発生します
コードは次のとおりです。
namespace User\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\Soap\Server;
use Zend\Soap\Client;
use Zend\Soap\AutoDiscover;
use User\Model\MyTest;
class TestController extends AbstractActionController {
private $_WSDL_URI = "http://127.0.0.1/test/index?wsdl";
private function handleWSDL() {
$autodiscover = new AutoDiscover();
//ini_set("soap.wsdl_cache_enabled", 0);
$autodiscover->setClass('User\Model\MyTest')
->setUri($this->_WSDL_URI);
$wsdl = $autodiscover->generate();
header("Content-type: text/xml");
echo $wsdl->toXml();
exit;
}
private function handleSOAP() {
$soap = new Server($this->_WSDL_URI,array('encoding' => 'utf-8','soap_version'=>SOAP_1_2));
$soap->setClass('User\Model\MyTest');
$soap->handle();
exit;
}
public function indexAction(){
if(isset($_GET['wsdl'])) {
$this->handleWSDL();
} else {
$this->handleSOAP();
}
}
public function clientAction(){
$client = new Client('http://127.0.0.1/test/index?wsdl');
$result = $client->getUser(31);
var_dump($result);exit;
}
}
にアクセスするhttp://localhost/test/index?wsdl
と、WSDL が返されます。
しかし、私がアクセスするhttp://localhost/test/index
と、エラーが返されます:
SOAP-ERROR: WSDL の解析中: からロードできませんでしたhttp://127.0.0.1/test/index?wsdl
: 外部エンティティのロードに失敗しました"http://127.0.0.1/test/index?wsdl"
私が訪問するhttp://localhost/test/client
と、それは戻ってきます
An error occurred
An error occurred during execution; please try again later.
Additional information:
SoapFault
File:
E:\WWW\vendor\ZF2\library\Zend\Soap\Client.php:1087
Message:
Wrong Version
Stack trace:
#0 E:\WWW\vendor\ZF2\library\Zend\Soap\Client.php(1087): SoapClient->__soapCall('getUser', Array, NULL, NULL, Array)
#1 E:\WWW\module\User\src\User\Controller\TestController.php(44): Zend\Soap\Client->__call('getUser', Array)
ここに MyTest.php ファイルがあります
namespace User\Model;
class MyTest{
/**
* To get the register information of the user
*
* @return string
*/
public function getUser(){
return 'hello';
}
}
前もって感謝します。