|
PHP SOAP Extension - Server Applications
Part:
1
2
3
4
(Continued from previous part...)
To test my server application, I wrote this client application, HelloClient.php:
<?php # HelloClient.php
# Copyright (c) 2005 by Dr. Herong Yang
#
$client = new SoapClient(null, array(
'location' => "http://localhost/HelloServer.php",
'uri' => "urn://www.herong.home/req",
'trace' => 1 ));
$return = $client->__soapCall("hello",array("world"));
echo("\nReturning value of __soapCall() call: ".$return);
echo("\nDumping request headers:\n"
.$client->__getLastRequestHeaders());
echo("\nDumping request:\n".$client->__getLastRequest());
echo("\nDumping response headers:\n"
.$client->__getLastResponseHeaders());
echo("\nDumping response:\n".$client->__getLastResponse());
?>
Check your IIS server to make sure it is running. Then run HelloClient.php. You will get:
Returning value of __soapCall() call: Hello world!
Dumping request headers:
POST /HelloServer.php HTTP/1.1
Host: localhost
Connection: Keep-Alive
User-Agent: PHP SOAP 0.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "urn://www.herong.home/req#hello"
Content-Length: 499
Dumping request:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn://www.herong.home/req"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body><ns1:hello>
<param0 xsi:type="xsd:string">world</param0>
</ns1:hello></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Dumping response headers:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Connection: close
Content-Type: text/xml; charset=utf-8
X-Powered-By: PHP/5.0.4
Content-Length: 522
Dumping response:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn://www.herong.home/res"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body><ns1:helloResponse>
<return xsi:type="xsd:string">Hello world!</return>
</ns1:helloResponse></SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Very exciting, right? Both server and client work nicely.
If you are interested in how the execution was carried out on the server,
I have a simplified execution flow diagram on the server side:
IIS PHP (SOAP Extension) HelloServer.php
HTTP request |
-------------->|
SOAP message |
| CGI | PHP CGI API
|------->|------------------------>|
| addFunction()
|
SOAP Extension API | handle()
|<------------------------|
|
| SOAP Extension API
|------------------------>|
SOAP Extension API | hello()
|<------------------------|
CGI |
|<-------|
HTTP response |
<--------------|
SOAP message |
HelloServer12.php - SOAP 1.2 Server Application
So far, we have tried only with SOAP 1.1. Can we do some tests with SOAP 1.2? Sure.
Here is my hello server modified for SOAP 1.2, HelloServer12.php:
<?php # HelloServer12.php
# Copyright (c) 2005 by Dr. Herong Yang
#
function hello($someone) {
return "Hello " . $someone . "! - SOAP 1.2";
}
$server = new SoapServer(null, array(
'uri' => "urn://www.herong.home/res",
'soap_version' => SOAP_1_2));
$server->addFunction("hello");
$server->handle();
?>
Here is my hello client modified for SOAP 1.2, HelloClient12.php:
<?php # HelloClient12.php
# Copyright (c) 2005 by Dr. Herong Yang
#
$client = new SoapClient(null, array(
'location' => "http://localhost/HelloServer12.php",
'uri' => "urn://www.herong.home/req",
'soap_version' => SOAP_1_2,
'trace' => 1 ));
$return = $client->__soapCall("hello",array("world"));
echo("\nReturning value of __soapCall() call: ".$return);
echo("\nDumping request headers:\n"
.$client->__getLastRequestHeaders());
echo("\nDumping request:\n".$client->__getLastRequest());
echo("\nDumping response headers:\n"
.$client->__getLastResponseHeaders());
echo("\nDumping response:\n".$client->__getLastResponse());
?>
(Continued on next part...)
Part:
1
2
3
4
|