-
- class FruitQuoteService
- {
- public $__dispatch_map = array();
- public $__typedef = array();
- 공개 함수 FruitQuoteService()
- {
- $this->__dispatch_map['getQuote'] = array(
- "in" => array("category" => "string") ,
- "out" => array("quote" => "int")
- );
- $this->__dispatch_map['getFruit'] = array(
- "in" => array(),
- "out" => array("fruitSummary" => "{urn:FruitQuoteService}fruitStruct")
- );
-
- $this->__typedef ['fruitStruct'] = array(
- 'category'=>'string', 'amount' => 'int'
- );
- }
-
- 공개 함수 getQuote($category)
- {
- 스위치($category)
- {
- 케이스 'apple':
- $quote = 10;
- break;
- case 'orange':
- $quote = 12;
- break;
- case 'banana':
- $quote = 20;
- break;
- 기본값 :
- $quote = 0;
- break;
- }
- return $quote;
- }//end funtion
-
- public function getFruit()
- {
- $list = array(
- array("apple", 100),
- array("orange", 500),
- array("banana", 260)
- );
- return $list;
- }//기능 종료
- }//수업 종료
- ?>
复代码
第二步:创建server.php 这个程序将接收并处理客户端的请求
-
- require_once("FruitQuoteService.php");
- require_once("SOAP/Server.php");
- $fruitQuote = new FruitQuoteService();
- $server = new Soap_Server();
- $server->addObjectMap($fruitQuote, "http://www.xxx.com");
- if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']=='POST')
- {
- $server->service($GLOBALS['HTTP_RAW_POST_DATA']);
- } else
- {
- require_once 'SOAP/Disco.php';
- $disco = new SOAP_DISCO_Server($server,'FruitQuoteService');
- header("콘텐츠 유형: 텍스트/xml" );
- if (isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'],'wsdl')==0) {
- echo $disco->getWSDL();
- } else {
- echo $disco->getDISCO();
- }
- }
- exit;
- ?>
-
复代码
现在可以通过http://www.shangyong.com/ws/server.php?wsdl 查看wsdl文档。
第三步:创建web服务客户端代码
- require_once('SOAP/Client.php');
- //这个name称空间必须和server.php중정义的一致
- $options = array('namespace' => 'http://www.xxx.com',
- 'trace' => 1); //为1表示可以通过__get_wire获取soap消息,默认是0
- $client = new SOAP_client("http://www.shangyong.com/ws/server.php");
- $params = array();
- $response = $client->call("getFruit", $params, $options);
- //print_r($client->__get_wire()); //출제 비누消息
- if (PEAR::isError($response)) {
- echo 'Error: ' . $응답->getMessage() . "
n";
- } else {
- print_r($response) . "n";
- }
- $params = array("name" => "orange");
- $response = $client->call("getQuote", $params, $options) ;
- if (PEAR::isError($response)) {
- echo '오류: ' . $응답->getMessage() . "
n";
- } else {
- echo $response . "nn";
- }
- exit;
- ?>
-
-
复主代码
客户端代码2
-
- require_once('SOAP/Client.php');
- /**
- * 네임스페이스, UEL, 매개변수 이름 등 모든 서비스 콘텐츠는 wsdl 파일에서 얻을 수 있습니다
- */
- $ wsdl = new SOAP_WSDL("http://www.shangyong.com/ws/server.php?wsdl");
- /**
- * wsdl에서 프록시 객체를 생성합니다. 이 객체에는 wsdl 문서에 정의된 모든 작업 방법이 포함되어 있습니다.
- * 프록시 객체를 통해 함수를 직접 호출할 수 있습니다
- * 장점: 사용자가 사용하기 쉽습니다
- */
- $client = $wsdl->getProxy( );
- $response = $client->getQuote("apple");
- if (PEAR::isError($response)) {
- echo '오류: ' . $응답->getMessage() . "
n";
- } else {
- echo $response . "nn";
- }
- $response = $client->getFruit();
- if (PEAR::isError($response)) {
- echo '오류: ' . $응답->getMessage() . "
n";
- } else {
- print_r($response) . "n";
- }
- exit;
- ?>
复system代码
|