SOAP 1.1

fishnibblersspongyDéveloppement de logiciels

14 déc. 2013 (il y a 3 années et 9 mois)

211 vue(s)

3# SOAP

SIMPLE OBJECT ACCESS
PROTOCOL


AND


4# OVERVIEW

WEB SERVICE BY PHP

Suranglutch Chaokoksoohng
(suranglutch@gmail.com)

Informatics BUU.

Bind

|

SOAP
: Simple Object Access
Protocol

Service

Registry

Service

Provider

Service

Requestor

Publish

Bind

Find

UDDI

SOAP

WSDL

SOAP in a nutshell



“SOAP is a protocol specification for invoking methods on servers, services,
components and objects. SOAP codifies the existing practice of using XML
and HTTP as a method invocation mechanism. The SOAP specification
mandates a small number of HTTP headers that facilitate firewall/proxy
filtering. The SOAP specification also mandates an XML vocabulary that is
used for representing method parameters, return values, and exceptions.”
[DevelopMentor]


Like XML
-
RPC, SOAP was developed to be a platform and
language independent method of passing information between
services, objects, and servers.


Provides a simple standardized mechanism for moving
structured information.

What is SOAP?


Protocol
ในการสื่อสารกันระหว่าง

Application


ก าหนดร

ปแบบในการส่งผ่านข้อความโดยผ่านเครือข่ายอินเทอร์เน็ต



ไม่ขึ้นกับ
Platform
และภาษาคอมพิวเตอร์ที่พัฒนา


มีโครงสร้างแบบ
XML


SOAP Message
เป็นข้อความที่ใช้ส่งผ่านเครือข่ายอินเทอร์เน็ต
และเมื่อใช้ร่วมกับเว็บ สามารถส่งผ่าน
Firewall
ได้ไม่ยาก



ได้รับการด

แลโดย
W
3
C

SOAP Messaging

Client

Application

Service

Application

HTTP

SOAP

Message

Internet

HTTP

SOAP

Message

Where did it come from?


Microsoft, UserLand, DevelopMentor
, IBM,

Ariba,
Commerce One, Compaq, HP, IONA, Lotus, SAP


~ Submitted to W3C May 2000.


XML based protocol


Intended to be a simple wire
-
protocol for exchange
of info. Largest use may be over Internet HTTP.

W3C


July 9, 2001

W3C Releases First Public Working Draft for SOAP
Version 1.2


Working draft produced by the XML Protocol
Working Group.


Specification can be found:

http://www.w3.org/TR/soap12/

Motivation


Many Distributed applications communicate using remote
procedure calls (RPC) between distributed objects like DCOM
and CORBA.


HTTP isn’t designed for those objects, so RPC calls aren’t easily
adapted to the Internet.


Security problems exist for those methods of RPC, so most
firewalls and proxy servers are set to block this traffic.


HTTP is supported by all Internet browsers and servers, so
SOAP presents a nice protocol for doing RPC
.

SOAP suds

SOAP IS:


Lightweight communication protocol


For communication between applications

one
-
way, request/response, multicast, etc..


Designed to communicate via HTTP


Not tied to any component technology


Not tied to any programming language


Based on XML


Simple and extensible

Loose Coupling


หลักการออกแบบ
Application
ที่เน้นการปรับ

เข้ากับสิ่งที่เปลี่ยนแปลงไปได้โดยง่าย
(Agility)


ลดความขึ้นต่อกัน

ระหว่างองค์ประกอบ


เพื่อให้มีความคล่องตัว


เป็นเป้าหมายของ
SOA


Loose Coupling in

SOA


Heterogeneous Technologies // Tightly Coupled


SOA
ใช้
Standardized Interface
แทนการใช้
Standardized Code


อิสระในการพัฒนา
Service
ด้วยเทคโนโลยีใดก็ได้


ได้
Technology Decoupling
โดยยอมเสีย
Interface Coupling


Data Exchange // all platforms


SOA
ใช้ร

ปแบบข้อม

ลที่อิสระกับเทคโนโลยี


หลีกปัญหา
Low
-
Level Data
-
Type Compatibility


Published Schema // Easy to find all service


Service Directory
ช่วยในการตกลงเรื่องการให้บริการอย่าง
Dynamic


Delayed Binding // Can change Version, no new compile


no new application


Binding
ท าตอนเรียกใช้
Service
และยึด
Standardized Interface


การเปลี่ยนแปลง
Service Implementation
ไม่กระทบผ

้ใช้

General (Basic)
Structure SOAP
Message


Envelope

Defines the content of the message


Header (optional)

contains header information


Body

contains call and response information

SOAP Message Structure

SOAP Header

SOAP Body

SOAP Envelope

XML

Message

(RPC or Doc)

SOAP Message

XML Message

SOAP Message


XML Message

SOAP Messaging

Client

Application

Service

Application

HTTP

SOAP

Message

Internet

HTTP

SOAP

Message

SOAP with Attachment (SwA)


SOAP
มักจะมี
XML Message
อย

่ในส่วน
Body


SwA
เป็นทางเลือกในการส่ง
XML Message
ขนาดใหญ่มาก
หรือ
Message
ที่ไม่ได้เป็น
XML
-
based
เช่น ร

ปภาพ
Binary
ขนาดใหญ่ หรือแฟ้มเสียง
MP
3
ขนาดใหญ่ เป็นต้น


ใช้
MIME multipart/related media type
และการอ้างอิงโดย
URI
ในส่วนต่าง ๆ ของ
MIME
ถึง
Attachment
ที่ต้องการ


ได้รับการด

แลโดย
W
3
C

SwA Structure

MIME
-
Version:1.0

Content
-
Type:Multipart/Related;boundary=MIME_boundary;type=text/xml;

start=“http://myURL/soap/attachments/fileupload1”


--
MIME boundary











--
MIME boundary






--
MIME boundary

Content
-
Type:text/xml;charset=utf
-
8

Content
-
Transfer
-
Encoding:
8
bit

Content
-
ID:<data
061400
a.xml.apache
-
soap.joshyjjp”/>

<?xml version=“
1.0
”?>

<SOAP:Envelope>



<theSignedForm

href=“cid:gif
061400
a.xml.apache
-
soap.joshyjjp”/>



</SOAP:Envelope>

Content
-
Type:image/gif

Content
-
Transfer
-
Encoding:binary

Content
-
ID:<gif061400a.xml.apache
-
soap.joshyjjp>

…gif image

Part 1

SOAP
Message

Part 2

Attachment
Image

Envelope


MUST be associated with SOAP envelope namespace:

http://www.w3.org/2001/06/soap
-
envelope


SOAP serialization namespace:

http://www.w3.org/2001/06/soap
-
encoding

Encoding Style attributes can contain a URI describing how the data should be
serialized.


SOAP message MUST NOT contain a DTD or
Processing Instructions.

SOAP Namespaces


The SOAP envelope has the namespace identifier
“http://www.w3.org/2001/06/soap
-
envelope”


The SOAP serialization has the namespace identifier
"http://www.w3.org/2001/06/soap
-
encoding"


The SOAP mustUnderstand fault namespace identifier
"http://www.w3.org/2001/06/soap
-
faults"


The SOAP upgrade namespace identifier
"http://www.w3.org/2001/06/soap
-
upgrade"

Header


Optional. If present, must immediately follow the SOAP
Envelope XML element followed by any header entries. Often
contains meta
-
information regarding the method call.


Actor attribute



who should process message


mustUnderstand attribute

how to process(default is “
0
” if not present)

<env:Header>


<t:Transaction


xmlns:t=“some
-
URI” env:mustUnderstand=“
1
”>


5


</t:Transaction>

</env:Header>

Body


Message to exchange. Most often for RPC calls and
error reporting.


Immediate child element of SOAP Envelope XML
element
(follows Header, if present).


Contains serialized method arguments.


Remote method name is used to name the method
call’s XML element and must immediately follow the
SOAP body opening XML tag.

That’s the basics…example


A simple SOAP XML document requesting the price of soap.


<env:Envelope>


<env:Body>


<m:GetPrice>


<Item>
Lever2000
</Item>

</m:GetPrice>


</env:Body>

</env:Envelope>

SYNTAX RULES


MUST be encoded using XML


MUST have a SOAP Envelope


CAN have a SOAP header


MUST have a SOAP Body


MUST use the SOAP Envelope namespace


MUST use the SOAP Encoding namespace


Must NOT contain a DTD reference


Must NOT contain XML Processing

ERRORS: SOAP Fault Element


Error messages from a SOAP application are carried inside a Fault element.


Must appear as an element w/in the <Body> element and can only appear once in a SOAP message.


Fault sub elements:

<faultcode>

MUST:
--
code identifying the error, for use by the software

<faultstring>

MUST:
--
error as a string

<faultactor>

MUST(Apps not acting as ultimate destination of SOAP message)


--
who caused the error

<detail>

MUST(if contents of Body could not be successfully processed)




--
specific error information


Fault Codes:

VersionMismatch


Invalid namespace for the SOAP Envelope Element

MustUnderstand


A child element of the Header element, with the mustUnderstand attribute




set to “
1
”, was not understood

Client



The message was incorrectly formed or contained incorrect information.

Server


There was a problem with the server so the message could not be process


Example:

<env:Fault>


<faultcode>env:MustUnderstand</faultcode>


<faultstring>SOAP Must Understand Error</faultstring>


</env:Fault>

Easy Transport….HTTP


Why HTTP?

HTTP has a request/response model allowing SOAP to embed
request parameters in HTTP request, and SOAP response
parameters into HTTP responses.


HTTP apps MUST use the media type “text/xml” when
including SOAP entity bodies in HTTP messages.

Content
-
Type: text/xml; charset=“utf
-
8


SOAP HTTP Header info


Basicly…sending XML formatted messages across the network
using HTTP.

Part of the HTTP payload


Commonly used with HTTP protocol (response/request model)
thereby making it very scalable.


SOAPAction HTTP Header Field.

SOAPAction: “Some
-
URI”



Firewall access? Most firewalls/proxies are opened to port 80
for HTTP giving SOAP a widely used transport protocol across
distributed systems. The SOAPAction HTTP header field allows
firewalls/proxys to filter SOAP messages if desired.


Security? No security has been implemented with SOAP, but
consider HTTPS/SSL.

Stock Quote example embedded in an
HTTP POST Request


POST /StockQuote HTTP/1.1

Host: www.stocksserver.com

Content
-
Type: text/xml; charset=“utf
-
8”

SOAP HTTP Header info

Content
-
Length: nnnn

SOAPAction: “Some
-
URI”

SOAP HTTP Header info


<env:Envelope


xmlns:env=“http://www.w3.org/2001/06/soap
-
envelope”>


<env:Body>


<m:GetStockQuote xmlns:m=“Some
-
URI”


env:encodingStyle=“http://www.w3.org/2001/06/soap
-
encoding”>



<symbol>SUNW</symbol>


</m:GetStockQuote >


</env:Body>

</env:Envelope>


Sent from the client to the service. First few lines are HTTP headers and SOAP HTTP
headers. Followed by the SOAPAction HTTP header and SOAP Envelope XML element.
The SOAP Body contains application defined element(s), as defined by the service.

Stock Quote Response example embedded
in HTTP Response


HTTP/
1.1 200
OK

Content
-
Type: text/xml; charset=“utf
-
8


SOAP HTTP Header info

Content
-
Length: nnnn


<env:Envelope xmlns:env=http://www.w
3
.org/
2001
/
06
/soap
-
envelope”>


<env:Body>


<m:GetStockQuoteResponse xmlns:m=“Some
-
URI”




env:encodingStyle=“http://www.w
3
.org/
2001
/
06
/soap
-
encoding”>




<price>
5.00
</price>


</m:GetStockQuoteResponse>


</env:Body>

</env:Envelope>

Client/Server…


In order for SOAP to work, the client must have code
running that is responsible for building the SOAP
request.


In response, a server must also be responsible for
understanding the SOAP request, invoke the specified
method, build the response message, and return it to
the client.


These details are up to you.


There already exist SOAP implementations for
languages such as Perl and Java.

SOAP box


Inherently stateless if it uses HTTP for transport.


Doesn’t implement security. However transport with
HTTP allows for SSL and HTTPS at the application
level.


SOAPAction HTTP header field allows your firewall to
filter SOAP method invocations/deny SOAP
processing altogether. Firewall filters SOAP packets
based on the object name, particular method, or a
combo of the two.

SOAP for RPC


Design goals of SOAP: simplicity & extensibility.


RPC with XML allows for uniform representation of
remote procedure calls and responses.


You’re not limited to HTTP protocol binding…just a
natural choice for the request/response model.

W3C Working Draft: 1.3 Examples of SOAP Messages

http://www.w3.org/TR/2001/WD
-
soap12
-
20010709/



“The first example shows a simple notification message expressed in SOAP. The message contains the header block
"alertcontrol" and the body block "alert" which are both application defined and not defined by SOAP. The header
block contains the parameters "priority" and "expires" which may be of use to intermediaries as well as the ultimate
destination of the message. The body block contains the actual notification message to be delivered.”


Example
0


<env:Envelope xmlns:env="http://www.w
3
.org/
2001
/
06
/soap
-
envelope">


<env:Header>


<n:
alertcontrol

xmlns:n="http://example.org/alertcontrol">


<n:priority>
1
</n:priority>


<n:expires>
2001
-
06
-
22
T
14
:
00
:
00
-
05
:
00
</n:expires>


</n:
alertcontrol
>


</env:Header>


<env:Body>


<m:
alert

xmlns:m="http://example.org/alert">


<m:msg>Pick up Mary at school at
2
pm</m:msg>


</m:
alert
>


</env:Body>


</env:Envelope>

Publish

|

Web Services
Description Language
:

WSDL

Service

Registry

Service

Provider

Service

Requestor

Publish

Bind

Find

UDDI

SOAP

WSDL

Web Services Description Language (WSDL)


WSDL
ได้รับการ
ออกแบบ
พัฒนาโดยกลุ่มบริษัทผ

้ผลิต

ได้แก่

Microsoft, Ariba, IBM
และบริษัทผ

้ผลิตอื่น



อีกกว่า

20
บริษัทร่วมกันสนับสนุน


ข้อก าหนด

WSDL
ได้รับการส่งต่อไปให้

W
3
C (World Wide
Web Consortium)


แลปรับปรุงต่อไป


WSDL
เป็นเสมือน

De Facto Standard
ในปัจจุบันส าหรับ
การพัฒนา

Web Services

WSDL Main Components


Data types


Message


Operation


Port type


Binding


Port


Service


Data Type and Message


ส่วน

Data Type
เป็นส่วนที่ใช้อธิบาย

Data
แต่ละ
ชนิดที่มีใช้และอ้างอิงถึงใน

WSDL


การอธิบาย

Data Type
นั้นจะท าโดยใช้

XML Schema


ส่วน

Message
เป็นการก าหนดชุดของข้อม

ลที่ใช้ใน
การส่งเป็น

Input Parameter
และชุดข้อม

ลที่ใช้ในการ
ตอบกลับของบริการ

Web Service

Operation and Port Type


ส่วน

Operation
เป็นการก าหนดชื่อ

Operation
พร้อม
รายละเอียดการส่งข้อม

ลน าเข้า

Input Message
เข้าส


การท างาน

และอธิบายผลลัพธ์ที่ได้ว่าเป็น

Output
Message
ใด


ส่วน

Port type
เป็นการจัดกลุ่มของ

Operation
ที่มีอย


ใน

Web Service
โดยเรียกได้ว่าเป็น

Set of Operations
ที่ได้รับการจัดรวมกลุ่มเพื่อใช้ในการท า

Binding
ต่อไป



Binding
, Port
and
Service


ส่วน

Binding
ก าหนดให้กลุ่ม

Operation
ที่มีอย

่ใน

Port Type
ใด



สามารถให้บริการผ่านทาง

Transport
ใดได้บ้าง

นั่นหมายถึง

Port
Type
หนึ่ง


สามารถจะให้บริการผ่าน

Transport
ได้หลายชนิด


Transport
ใน

Web Service
มักจะใช้

HTTP


ส่วน

Port
ก าหนดต าแหน่ง

Address
ที่ผ

้ใช้บริการจะเข้ามาใช้
บริการจาก

Web Service
ได้

โดยก าหนด

Endpoint Address
เข้า
กับส่วน

Binding
ใด



ที่มีอย




ส่วน

Service
เป็นกลุ่มของ

Port
ที่ระบุ

Endpoint Address
ส าหรับ
ให้บริการแล้ว



้ใช้บริการ

Service Consumer
ที่อย

่ภายนอก
สามารถอ้างถึง

Service
นี้ได้

Service Group

Services group operations in the same way that objects or
classes group methods

Service

Network Address

Binding …

Operation
1

Operation2

Port

Port Type

Network Address

Binding …

Operation
1

Operation
2

Port

Port Type

Network Address

Binding …

Operation
1

Operation2

Port

Port Type

Please see, Overview & Example UDDI Slide For Win!!!


Find

|

Universal
Description
,
Discovery
, and
Integration
:
UDDI

Service

Registry

Service

Provider

Service

Requestor

Publish

Bind

Find

UDDI

SOAP

WSDL

Universal Description, Discovery,

and
Integration (UDDI)



UDDI
สนับสนุนโดย

OASIS


UDDI
มีหน้าที่ในการช่วยค้นหา

Web Services
และให้ข้อม

ลต่าง



ที่จ าเป็นต่อผ

้ร้องขอ


UDDI
จะ
จัดเก็บข้อม

ลเชื่อมโยงไปยัง

WSDL
ของบริการ

Web
Services
ใหม่



ที่ได้รับการ

Register
เข้ามา

รวมทั้งข้อม

ลอื่น ๆ
ที่อธิบาย
Web Services

เพื่อให้บริการค้นหาได้


UDDI
ก็คือ

Registry
ของข้อม

ลค าอธิบายเกี่ยวกับ

Web Services
(Web Services Metadata)
นั่นเอง

Public UDDI


Public UDDI
คือกลุ่มผ

้ท าหน้าที่ให้บริการการสืบค้นบริการ

Web
Services
ในเครือข่ายอินเ

อร์เน็ต


กลุ่มผ

้ด

แล

Public UDDI


IBM


Microsoft


SAP


HP


NTT


Etc


ข้อม

ลที่ท าการ

Register
จะกระจายไปทั่วถึงกันในกลุ่มผ

้ด

แล

Public
UDDI
โดยอัตโนมัติ




้ใช้

Public UDDI
สามารถส่ง

SOAP Request
ไปร้องขอการค้นหา

Web Services
ที่ตนต้องการได้จากบริษัทใด



ในกลุ่มผ

้ด

แล

UDDI Operators

SAP

UDDI

Server

IBM

UDDI

Server

Microsoft

UDDI

Server

HP

UDDI

Server

Others

UDDI

Server

UDDI Information Model

<businessEntity>

name = xmethods

categories =
82101528

contact = xmethods.net

<businessService> (
1
..n)
name =
CurrencyExchangeServiceca
tegories =
84121603

<bindingTemplate>
(1..n)

access point =
http
://
services
.
xmethod
s
.
net
:
80
/
soap


<tModel>

name = CurrencyExchangeModel

URL =
http
://
www
.
xmethods
.
net
/
sd
/
2001
/
Curre
ncyExchangeService
.
wsdl

<publisherAssertion>

name = Australian Import

relationship = business partner

<operationalInfo>

created =
03
/
01
/
04

modified =
05
/
01
/
04

OVERVIEW

WEB SERVICE BY PHP

Suranglutch

Chaokoksoohng

(suranglutch@gmail.com)

Informatics BUU.

Web Service by PHP


Must to have


PHP


PHP NUSOAP


Apache server


WSDL Editor

PHP NUSOAP


สนับสนุน
SOAP


สามารถ
Generate WSDL
ได้


ดาวน์โหลดได้ที่
http://sourceforge.net/projects/nusoap/


Server, Test Program For NUSOAP Service

<?php

require_once('nusoap.php');

// Pull in the NuSOAP code


$server = new soap_server;

// Create the server instance

$server
-
>register('hello');

// Register the method to expose


// Define the method as a PHP function

function hello($name) {


return 'Hello, ' . $name;

}

// Use the request to (try to) invoke the service

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ?


$HTTP_RAW_POST_DATA : ‘ ';

$server
-
>service($HTTP_RAW_POST_DATA);

?>


อาจก าหนด

$debug =
1
;

เพื่อ
Debug error

Client, Test Program For NUSOAP Service

<?php

// Pull in the NuSOAP code

require_once('nusoap.php');



// Create the client instance

$client = new soapclient('http://localhost/phphack/helloworld.php');


// Call the SOAP method

$result = $client
-
>call('hello', array('name' => 'Scott'));


// Display the result

print_r($result);

?>


อาจจะก าหนดบรรทัดต่อไปนี้เพื่อท า
Debugging

echo '<pre>' . htmlspecialchars($client
-
>request, ENT_QUOTES) . '</pre>';

echo '<h
2
>Response</h
2
>'; echo '<pre>' . htmlspecialchars($client
-
>response, ENT_QUOTES) . '</pre>';

Debugging on Client Side

if ($client
-
>fault) {


echo '<p><b>Fault: ';


print_r($result);


echo '</b></p>';

} else {


// Check for errors


$err = $client
-
>getError();


if ($err) {


// Display the error


echo '<p><b>Error: ' . $err . '</b></p>';


} else {


// Display the result


print_r($result);


}

}


SOAP Request

$result = $client
-
>call('hello', array('name' => 'Scott'));

POST /phphack/helloworld
2
.php HTTP/
1.0

Host: localhost

User
-
Agent: NuSOAP/
0.6.8
(
1.81
)

Content
-
Type: text/xml; charset=ISO
-
8859
-
1

SOAPAction: ""

Content
-
Length:
538


<?xml version="
1.0
" encoding="ISO
-
8859
-
1
"?>

<SOAP
-
ENV:Envelope


SOAP
-
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"


xmlns:SOAP
-
ENV="http://schemas.xmlsoap.org/soap/envelope/"


xmlns:xsd="http://www.w
3
.org/
2001
/XMLSchema"


xmlns:xsi="http://www.w
3
.org/
2001
/XMLSchema
-
instance"


xmlns:SOAP
-
ENC="http://schemas.xmlsoap.org/soap/encoding/"


xmlns:si="http://soapinterop.org/xsd">


<SOAP
-
ENV:Body>


<ns
1
:hello xmlns:ns
1
="http://testuri.org">


<name xsi:type="xsd:string">
Scott
</name>


</ns
1
:hello>


</SOAP
-
ENV:Body>

</SOAP
-
ENV:Envelope>

SOAP Response

$server
-
>service($HTTP_RAW_POST_DATA);

HTTP/
1.1 200
OK

Server: Microsoft
-
IIS/
5.0

Date: Wed,
03
Nov
2004 21
:
32
:
34
GMT

X
-
Powered
-
By: ASP.NET

X
-
Powered
-
By: PHP/
4.3.4

Server: NuSOAP Server v
0.6.8

X
-
SOAP
-
Server: NuSOAP/
0.6.8
(
1.81
)

Content
-
Type: text/xml; charset=ISO
-
8859
-
1

Content
-
Length:
556


<?xml version="
1.0
" encoding="ISO
-
8859
-
1
"?>

<SOAP
-
ENV:Envelope


SOAP
-
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"


xmlns:SOAP
-
ENV="http://schemas.xmlsoap.org/soap/envelope/"


xmlns:xsd="http://www.w
3
.org/
2001
/XMLSchema"


xmlns:xsi="http://www.w
3
.org/
2001
/XMLSchema
-
instance"


xmlns:SOAP
-
ENC="http://schemas.xmlsoap.org/soap/encoding/"


xmlns:si="http://soapinterop.org/xsd">


<SOAP
-
ENV:Body>


<ns
1
:helloResponse xmlns:ns
1
="http://tempuri.org">


<return xsi:type="xsd:string">Hello, Scott</return>


</helloResponse>


</SOAP
-
ENV:Body>

</SOAP
-
ENV:Envelope>

Web Service by PHP


ก าหนดต าแหน่งเพื่อเรียกใช้
NUSOAP
ใน
PHP
โดยเลือกก าหนดอย่างใดอย่างหนึ่ง จาก


include (‘nusoap.php’);


include_once(‘nusoap.php’);


require (‘nusoap.php’);


require_once (‘nusoap.php’);


Making Service Part


สร้าง
Server Instant


$service = new
soap_server
;


ก าหนด
WSDL
ส าหรับการเรียกใช้เซอร์วิส ซึ่ง
NUSOAP
จะท าการ
Generate WSDL
ให้เอง


$service
-
>
configureWSDL
(“
ชื่อ
WSDL”, “urn
ของ
WSDL”);


ลงทะเบียนเซอร์วิสกับ
SOAP Server


ท าการสร้างฟังก์ชั่นเพื่อให้บริการ


ก าหนดการส่งข้อม

ลกลับไปยัง
Client





$service
-
>service(HTTP_RAW_POST_DATA);





NUSOAP API


ได้ที่

http://dietrich.ganx
4
.com/nusoap/APIDoc/

Tuturial: http://www.scottnichol.com/nusoapprogwsdl.htm

Example: Web Service in restaurant

Client


-

รับประเภทอาหาร



Server

-
รับประเภทอาหาร

-
ส่งรายการอาหาร



HTML

Form

User
เลือก

ประเภทอาหาร

CateringServiceClient.php

CateringService.php

1

Call getFoodName()

-

แสดงรายการอาหาร


2

Catering Service Coding

<?php


// Pull in the NuSOAP code


require('../lib/nusoap.php');


// Create the server instance


$server = new soap_server();


// Initialize WSDL support


$server
-
>configureWSDL('CateringService', 'urn:CateringServiceWsdl');


//
ก าหนด
Type
ต่าง ๆ ใน
WSDL


…..


$server
-
> register('getFoodName',



// method name



array('typefood' => 'xsd:string'),


// input parameters



array('food' => 'tns:foodnameArray'),


// output parameters
ก าหนดใน

SOAP



'urn:CateringServiceWsdl',







// namespace



'urn:CateringServiceWsdl#getFoodName', // SOAPAction



'rpc',





// style



'encoded',




// use



'cateringbufService') ;




Catering Service Coding (con.
2
)

function getfoodName($typefood){



$food=array();



//
อาจจะมีการติดต่อฐานข้อม

ลก็ได้







return $food;

}


// Use the request to (try to) invoke the service

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ?
$HTTP_RAW_POST_DATA : '';

//

ส่งผลลัพธ์กลับไปยัง
Client program

$server
-
>service($HTTP_RAW_POST_DATA);


php?>

Catering Service Coding (con.
3
)


การก าหนด
ComplexType
ส าหรับ
Output message

$server
-
>wsdl
-
>addComplexType(


'fooddetail',


'complexType',


'struct',


'all',


'',


array(


'foodname' => array('name'=>'foodname','type'=>'xsd:string'),




)

);

Output message
ของโปรแกรม
Server

Output message
ของ

SOAP

Catering Service Coding (con.
4
)


การก าหนด
ComplexType
ส าหรับ
Output message


$server
-
>wsdl
-
>addComplexType(


'foodnameArray', //
name of output variable


'complexType',


'array',


' ',


'SOAP
-
ENC:Array',


array(),


array(


array('ref'=>'SOAP
-
ENC:arrayType','wsdl:arrayType'=>'tns:fooddetail[]')

// Array foodname µÒÁ∙Õè»ÃСÒÈäÇé¢éÒ
§
º
¹


),


'tns:fooddetail'


);

ComplexType


ตัวอย่าง
ComplexType

ที่มีหลาย
Element

$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') )


);

function listAllPersons(
Input_Message
) {


$p
var
[
0
] = array (‘firstname’ => ‘Nid’, ‘age’=>
23
, ‘gender’ =>’Female’);


$pvar[
1
] = array (‘firstname’ => ‘Dang’, ‘age’=>
22
, ‘gender’ =>’Female’);





return $pvar;

}

Output message

Catering Service
Client
Coding

<?php

if(!isset($_GET["typefood"])){



//
ก าหนด ฟอร์มเพื่อให้
User
ท าการเลือกประเภทอาหาร


//
ส่วนนี้อาจจะไม่มีก็ได้หาก
Client
ไม่จ าเป็นต้องท าการติดต่อกับ
User


}else{


//
ส่วนนี้เป็นการเรียกไปยัง
Service


require('../lib/nusoap.php');


$s = new soapclient('http://localhost/phpservice/samples/CateringService.php');


$result = $s
-
>call('getFoodName',$_GET["typefood"]);




//
แสดงผลลัพธ์

}

?>






Calling Service by WSDL

//Set proxy

$client = new soapclient('GoogleSearch.wsdl', true,



$proxyhost, $proxyport, $proxyusername, $proxypassword);

$err = $client
-
>getError();

if ($err) {


echo '<h
2
>Constructor error</h
2
><pre>' . $err . '</pre>';

}

$client
-
>soap_defencoding = 'UTF
-
8
';

// Set $params ….


$result = $client
-
>call('doGoogleSearch', $params);

References…and other great links!


how soap works

http://www
-
106
.ibm.com/developerworks/library/ws
-
peer
3
/


Index for articles and various SOAP related resources.

http://www.perfectxml.com/soaptutor.asp


Older soap specification

SOAP: Simple Object Access Protocol

http://static.userland.com/xmlRpcCom/soap/SOAPv
11
.htm


soap primer

http://discuss.develop.com/archives/wa.exe?A
2
=ind
0007
&L=soap&F=&S=&P=
9777


soap school

http://www.w
3
schools.com/SOAP/default.asp


Topics in Software Engineering, Web Infrastructure, Services, and Applications,
Jill.Kerschbaum@cs.colorado.edu


understanding soap

http://softwaredev.earthweb.com/article/
0
,,
10455
_
641321
,
00
.html


W
3
C SOAP

http://www.w
3
.org/TR/soap
12
/


W
3
c SOAP notes

http://www.w
3
.org/TR/SOAP/