PEAR-SOAPとFlexからの通信(サーバサイド)
PEAR-SOAPを用いて作られたWebServiceをFlexからSOAP通信で呼び出したときのメモです。色々とはまりどころがあったのでその際のメモも一緒に。
サンプルつくるにあたっては、サーバ側(PHP)→クライアント側(Flex)の順番で作成しています。
1.サーバ側の準備
サーバ側に必要なのは、実際のSOAP通信の際に受け口になってくるphp(xml.php)で、今回はメソッドなどを外出ししたかったので、クラスにまとめました(Service.php)。
サーバ側のソースなどは以下の通りで、簡単の為にxml.phpとService.phpをサーバのドキュメントルートに設置しています。http://localhost/xml.phpでアクセスできるようにしています。
xml.php
<?php require_once 'Service.php'; require_once 'SOAP/Server.php'; $server = new SOAP_Server(); $server->addObjectMap(new Service(), "urn:foo"); // ※1 if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') { // $server->service($HTTP_RAW_POST_DATA); $server->service(file_get_contents('php://stdin')); // ※2 } else { require_once 'SOAP/Disco.php'; $disco = new SOAP_DISCO_Server($server, 'foo'); header("Content-type: text/xml"); if(isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'], 'wsdl') == 0) { echo $disco->getWSDL(); } else { echo $disco->getDISCO(); } exit; }
Service.php
<?php class Service { public function __construct() { $this->__dispatch_map = array(); $this->__dispatch_map['hello'] = array( 'in' => array('arg' => 'string'), 'out' => array('return' => 'string') ); } public function hello($string) { return $string; } }
WSDLの表示
ここまでつくってhttp://localhost/xml.php?wsdlにアクセスすると以下のようにWSDLが表示されればOK!!!