一,什麼是soap,什麼是wsdl,爲何要用他們php
SOAP是基於XML和HTTP通訊協議,xml各類平臺,各類語言都支持的一個種語言。http呢它獲得了全部的因特網瀏覽器及服務器的支持。html
WSDL 指網絡服務描述語言 (Web Services Description Language),是一種使用 XML 編寫的文檔。這種文檔可描述某個 Web service。它可規定服務的位置,以及此服務提供的操做。java
我是作php的,你是java的,他是作.net,若是咱們三個之間要進行通訊,要進行數據交換,怎麼辦呢?咱們須要一個能和咱們都能通訊的工具。soap,wsdl被創造出來,使得運行在不一樣的操做系統並使用不一樣的技術和編程語言的應用程序能夠互相進行通訊。編程
二,實例瀏覽器
若是php要使用soap的話,一般作法是,添加了一下php的soap模塊,在php.ini裏面加上soap.so,下面介紹一個不要添加soap.so文件,也能夠實現soap的方法服務器
nusoap是php寫的一個功能文件,包涵進來就能夠用了,網上不少本身去搜一下吧。網絡
1,不使用wsdl數據結構
a,服務端helloworld2.php編程語言
- <?php
- require_once('./lib/nusoap.php');
-
- $server = new soap_server;
-
- $server->register('hello');
-
- function hello($name) {
- return 'Hello, ' . $name;
- }
-
- $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
- $server->service($HTTP_RAW_POST_DATA);
- ?>
b,客戶端hello.php函數
- <?php
- require_once('./lib/nusoap.php');
- $client = new soapclient('http://localhost/test/helloworld2.php');
- $err = $client->getError();
- if ($err) {
-
- echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
- }
-
- $result = $client->call('hello', array('person' => "this is a test"));
-
- echo '<h2>Result</h2><pre>';
- print_r($result);
- echo '</pre>';
- ?>
2,使用wsld
a,服務器端
- <?php
- require_once('./lib/nusoap.php');
- $server = new soap_server();
- $server->configureWSDL('hellowsdl2', 'urn:hellowsdl2');
- $server->wsdl->addComplexType(
- 'Person',
- 'complexType',
- 'struct',
- 'all',
- '',
- array(
- 'firstname' => array('name' => 'firstname', 'type' => 'xsd:string'),
- 'age' => array('name' => 'age', 'type' => 'xsd:int'),
- 'gender' => array('name' => 'gender', 'type' => 'xsd:string')
- )
- );
- $server->wsdl->addComplexType(
- 'SweepstakesGreeting',
- 'complexType',
- 'struct',
- 'all',
- '',
- array(
- 'greeting' => array('name' => 'greeting', 'type' => 'xsd:string'),
- 'winner' => array('name' => 'winner', 'type' => 'xsd:string')
- )
- );
- $server->register('hello',
- array('person' => 'tns:Person'),
- array('return' => 'tns:SweepstakesGreeting'),
- 'urn:hellowsdl2',
- 'urn:hellowsdl2#hello',
- 'rpc',
- 'encoded',
- 'test'
- );
- function hello($person) {
- $greeting = 'Hello, ' . $person['firstname'] .
- '. It is nice to meet a ' . $person['age'] .
- ' year old ' . $person['gender'] . '.';
-
- $winner = 'Scott';
- return array(
- 'greeting' => $greeting,
- 'winner' => $winner
- );
- }
- $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
- $server->service($HTTP_RAW_POST_DATA);
- ?>
b,客戶端
- <?php
- require_once('./lib/nusoap.php');
- $client = new soapclient('http://localhost/test/helloworld2.php');
- $err = $client->getError();
- if ($err) {
-
- echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
- }
- $person = array('firstname' => 'Willi', 'age' => 22, 'gender' => 'male');
-
- $result = $client->call('hello', array('person' => $person));
- if ($client->fault) {
- echo '<h2>Fault</h2><pre>';
- print_r($result);
- echo '</pre>';
- } else {
- $err = $client->getError();
- if ($err) {
- echo '<h2>Error</h2><pre>' . $err . '</pre>';
- } else {
- echo '<h2>Result</h2><pre>';
- print_r($result);
- echo '</pre>';
- }
- }
- echo '<h2>Request</h2>';
- echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
- echo '<h2>Response</h2>';
- echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
- echo '<h2>Debug</h2>';
- echo '<pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
- ?>
上面二個例子無論是客戶端,仍是服務器端,都是用php寫的,你能夠試着用多種語言來寫,來測試一下。無論你是用php的模塊,仍是用nusoap,裏面具體方法就不在這多說了,手冊裏面都有。