bp1070 web services a technical overview
Download
Skip this Video
Download Presentation
BP1070: Web Services – A Technical Overview

Loading in 2 Seconds...

play fullscreen
1 / 72

2003 Exchange PROGRESS BP1070: Web Services A Technical ... - PowerPoint PPT Presentation


  • 336 Views
  • Uploaded on

BP1070: Web Services – A Technical Overview. Ken Wilner ([email protected]) Fellow. Agenda. Web Services Architecture Wire Stack Description Stack Discovery Stack That’s All Folks…. What Is a Web Service?.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '2003 Exchange PROGRESS BP1070: Web Services A Technical ...' - Melvin


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
agenda
Agenda

Web Services Architecture

Wire Stack

Description Stack

Discovery Stack

That’s All Folks…

what is a web service
What Is a Web Service?

A Web Service is a software system identified by a URI, whose public interfaces and bindings are defined and described by XML.

Its definition can be discovered by other software systems.

These systems may then interact with the Web Service in a manner prescribed by its definition, using XML based messages conveyed by internet protocols.

Web Services ArchitectureW3C Working Draft 14 November 2002http://www.w3.org/TR/ws-arch/

What the standards guys are saying.

what is a web service4
What is a Web Service?

An application that can be accessed over the Web or any network from another application using RPC style calls encoded using SOAP over HTTP where the interface is described using WSDL

Ken Wilner, Fellow PSC

Reality today.

service oriented architecture and web services
Service-Oriented Architecture and Web Services

Web ServiceRegistry

Publish, Find, and Bind

Find Web Service

Publish Web Service

ServiceDetails

Interact (Bind)

Web Service Provider

Web ServiceRequestor

web services protocol stacks

SOAP

XML

WSDL

HTTP

XML Schema

Web Services Protocol Stacks

Directory

UDDI

A

Inspection

Messaging

Discovery Stack

Data Encoding

Network Protocol

Service Orchestration

Wire Stack

Service Description

Datatype Definition

Description Stack

web services implementation architecture
Web Services Implementation Architecture

Web Server

ApplicationServer

POST(Soap)

Web Service Client

HTTP Listener

SOAP Processor

BusinessLogic

Business Interface

Response(Soap)

WSDL

Web Service

openedge web services toolkit architecture

Web Server

POST(Soap)

Web Service Client

HTTP Listener

Web Services Adapter

Response(Soap)

AppServers

WSDLFiles

OpenEdge Web Services Toolkit Architecture
why should i care
Why Should I Care?
  • Understand the standards that make up Web Services
  • Understand the state of Web Services and where its heading
  • Understand how to use Web Services efficiently
  • Understand why Web Services will be successful and where
agenda10

SOAP

XML

HTTP

Agenda

Web Services Architecture

Wire Stack

Description Stack

Discovery Stack

That’s All Folks…

Messaging

Data Encoding

Network Protocol

Wire Stack

what it is
What It Is….
  • A lightweight xml-based protocol for message exchange
  • Supports message typing, strong typing, and structured data
  • Can be used in a variety of communication paradigms
  • Programming language and platform independent
  • Highly extensible
    • Transport independent
    • Encoding independent
    • Extra context via headers
what it is12
What It Is…
  • W3C Note SOAP V1.1 http://www.w3.org/TR/SOAP
    • SOAP message format
    • SOAP encoding
    • SOAP over HTTP transport binding
    • SOAP for RPC convention
  • W3C Draft SOAP V1.2

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

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

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

soap message

<Body> encloses body entries

<Header> encloses headers (optional)

Headers entries contain extensions

Message name and data

SOAP Header

Header Entry

Header Entry

SOAP Body

Body Entry

SOAP Message

<Envelope> encloses message

SOAP Envelope

soap message14
SOAP Message

<?xml version="1.0" encoding="UTF-8"?>

<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.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<SOAP-ENV:Header>

<hd:Security xmlns:hd="http://www.e1.com">

<username>Wilner</username>

<password>BigDeal</password>

</hd:Security>

</SOAP-ENV:Header>

<SOAP-ENV:Body>

<ns1:GetCustomer xmlns:ns1="http://www.e1.com">

<CustomerId xsi:type="xsd:int">6734</CustomerId>

</ns1:GetCustomer>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

soap envelope
SOAP Envelope

<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.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<SOAP-ENV:Body>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

soap body
SOAP Body
  • Body entry contains application-specific data
  • Serialized based on encodingStyle
  • May represent an RPC request or response message, a specific document, or whatever you want
soap body17
SOAP Body

<SOAP-ENV:Envelope … >

<SOAP-ENV:Body>

<ns1:GetCustomer xmlns:ns1="http://www.e1.com">

<CustomerId xsi:type="xsd:int">6734</CustomerId>

</ns1:GetCustomer>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

soap header
SOAP Header
  • Allows (optional) context information to be added to message independently of the payload
    • Authentication and authorization information
    • Transaction id
    • Object id
  • Intermediary specific information – chaining
    • Routing information – to, from, via, etc…
    • Security information
    • Auditing
soap header19
SOAP Header

<SOAP-ENV:Envelope … >

<SOAP-ENV:Header>

<hd:TID xmlns:hd="http://www.e1.com">

673456:4439234:439439439349

</hd:TID>

<hd:Securityxmlns:hd="http://www.e1.com">

<username>Wilner</username>

<password>BigDeal</password>

</hd:Security>

</SOAP-ENV:Header>

<SOAP-ENV:Body>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

transports
Transports
  • HTTP
  • SMTP (E-Mail)
  • FTP
  • Files
  • Postal Service
  • FAX
  • DOG
soap over http
SOAP Over HTTP
  • As specified in SOAP V1.1 note
  • HTTP POST message
  • SOAPAction HTTP header
  • HTTP status code
    • 2xx indicates success
    • 500 indicates fault
soap over http request

HTTP

Header

SOAP Request

SOAP Over HTTP Request
    • POST / HTTP/1.1
    • SOAPAction: "http://www.e1.com/GetCustomer"
    • Content-Type: text/xml; charset=utf-8
    • Host: localhost:8081
    • Content-length: 706
    • <SOAP-ENV:Envelope … >
    • <SOAP-ENV:Body>
    • <ns1:GetCustomer
    • xmlns:ns1="http://www.e1.com">
    • <CustomerId xsi:type="xsd:int">
    • 6734
    • </CustomerId>
    • </ns1:GetCustomer>
    • </SOAP-ENV:Body>
  • </SOAP-ENV:Envelope>
soap over http response

HTTPResponseHeader

SOAP Response

SOAP Over HTTP Response
    • HTTP/1.1 200 OK
    • Content-Type: text/xml; charset=utf-8
    • Content-Length: 226
    • <SOAP-ENV:Envelope … >
    • <SOAP-ENV:Body>
    • <ns1:GetCustomerResponse xmlns:ns1="http://www.e1.com">
    • <Name xsi:type="xsd:string">
    • Fred Flintstone
    • </Name>
    • <Balance xsi:type="xsd:decimal">
    • 2349.27
    • </Balance>
    • </ns1:GetCustomerResponse>
    • </SOAP-ENV:Body>
  • </SOAP-ENV:Envelope>
attachments
Attachments
  • Standard way of attaching or including non-XML data in a Web Services (SOAP) request, e.g. a picture, an EXCEL file, another XML document, etc.
  • Two Approaches
    • SOAP with Attachments
      • based on MIME with extensions to SOAP and WSDL

http://www.w3.org/TR/SOAP-attachments

    • WS-Attachments
      • A Microsoft and IBM proposal
      • based on DIME
      • A more efficient version of MIME

http://www-106.ibm.com/developerworks/webservices/library/ws-attach.html

soap with attachments

MIME Header

SOAP Envelope

MIME Part 0

SOAP Header

SOAP Body

MIME Part n

SOAP with Attachments

MIME

Standard MIME header

1st MIME part containers SOAP message

...

Other MIME parts container whatever you want

????????

soap with attachments26
SOAP with Attachments

MIME-Version : 1.0

Content Type:Multipart/Related;boundary=MIME_boundary; type=text/xml; [email protected]_boundary

Content-Type: text/xml; charset=UTF-8Content-Transfer-Encoding: 8bitContent-Id: <[email protected]><?xml version="1.0" encoding="UTF-8"?>

<SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/>

<SOAP-ENV:Body>

<ns1:GetCustomerPictureResponse

xmlns:ns1="http://www.e1.com">

<Picture href="cid:[email protected]" />

</ns1:GetCustomerPictureResponse>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

soap with attachments27
SOAP with Attachments

--MIME_boundary

Content-Type: image/tiff

Content-Transfer-Encoding: binary

Content-Id: <[email protected]>

…binary TIFF image

--MIME_boundary

agenda28

WSDL

XML Schema

Agenda

Web Services Architecture

Wire Stack

Description Stack

Discovery Stack

That’s All Folks…

Service Orchestration

Service Description

Datatype Definition

Description Stack

slide29
WSDL

Web Service Description Language

W3C note – defacto standard

http://www.w3.org/TR/WSDL.html

  • Service interface
    • What can it do?
  • Service implementation
    • How do I invoke it?
  • Service location (optional)
    • Where does it reside?
slide30
WSDL
  • Service interface maps to business interface
  • Generation approaches:
    • WSDL generated from business interface
    • Business interface generated from WSDL (industry standards)
slide31

XML Schema

part

XML Schema

part

XML Schema

part

XML Schema

porttype

binding

binding

ServiceInterface

operation

operation

operation

message

message

message

WSDL

types

ServiceImplementation

ServiceLocation

service

port

slide32
WSDL

<definitions ….>

<messages …> ... </messages>

<messages …> ... </messages>

<portType …> … </portType>

<portType …> … </portType>

<binding …> … </binding>

<service…> … </service>

</definitions>

slide33
WSDL

Definitions

<definitions name="CustomerAdmin"

targetNamespace=

"http://www.example.com/customer"

xmlns:tns="http://www.example.com/customer"

xmlns:soap=

"http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns:xsi=

"http://www.w3.org/2001/XMLSchema-instance">

xmlns="http://schemas.xmlsoap.org/wsdl/"

</definitions>

slide34
WSDL

Messages

<message name="GetCustomer">

<part name="CustomerId" type="xs:int"/>

</message>

<message name="GetCustomersResponse">

<part name="Name" type="xs:string"/>

<part name="Balance" type="xs:decimal"/>

</message>

slide35
WSDL

PortType

<portType name="CustomerPortType">

<operation name="GetCustomer">

<input message="tns:GetCustomer"/>

<output message="tns:GetCustomerResponse"/>

</operation>

</portType>

slide36
WSDL

Binding

<binding name="CustomerBinding" type="tns:CustomerPortType">

<soap:binding style="rpc" transport=

"http://schemas.xmlsoap.org/soap/http"/>

<operation> … </operation> …

</binding>

slide37
WSDL

Binding

<operation name="GetCustomer">

<soap:operationsoapAction=

"http://www.progress.com/Sports"/>

<input>

<soap:body use="encoded“

encodingStyle=

"http://schemas.xmlsoap.org/soap/encoding/" namespace="http://www.e1.com/customer"/>

</input>

<output>

<soap:body use="encoded"

encodingStyle=

"http://schemas.xmlsoap.org/soap/encoding/" namespace="http://www.e1.com/customer"/>

</output>

</operation>

slide38
WSDL

Service

<service name="CustomerService">

<port name="CustomerPort" binding="CustomerBinding">

<soap:address location="http://www.example.com/customer"/>

</port>

</service>

wsdl support for attachments
WSDL Support for Attachments

Binding

<binding name="Customer_Binding" ... />

<soap:binding .../>

<operation name="SetCustomerPicture">

<soap:operation ... />

<input>

<mime:multipartRelated>

<mime:part>

<soap:body parts="CustomerId" use="encoded" ... />

</mime:part>

<mime:part>

<mime:content

part="CustomerPicture" type="image/tiff"/> </mime:part>

</mime:multipartRelated>

</input>

<output> … </output>

</operation>

</binding>

service orchestration
Service Orchestration
  • A fancy name for a business process
  • SOAP, WSDL, and "discovery mechanism" allow for loosely integrated Web Services
  • Business requirement to be able to model and formally describe complex Web Service interactions
  • Specifies the execution order of a collection of Web Services, e.g.
    • A travel reservation system
    • An mortgage application system
service orchestration41

WebService

WebService

Business Process

WebService

WebService

Service Orchestration

WebServiceClient

  • Looks like a Web Service to the outside world
  • Accessed using WSDL
  • Needs to be flexible and adaptable
  • Swap out one service implementation for another
  • Requirement for a "process engine" that handles the flow between Web Services

Web Service

service orchestration42

Order Title Search

  • MortgageApp.wsdl
  • MortgageApp Porttype
  • SendMortgageRequest Operation
Service Orchestration

Mortgage Web Service

Receive Mortgage Application

Process Mortgage

Order Appraisal

Order Credit Check

Process Application

Notify Customer

Web Service Invocation

Message passing

service orchestration43
Service Orchestration
  • Using standards allow process to be published, shared, and integrated with other processes
  • Lots of proposed standards – very immature
    • WSFL
      • http://www.ibm.com/software/solutions/webservices/pdf/WSFL.pdf
    • XLANG
      • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/bts_2002/htm/bts_gs_content_rtzn.asp
    • BPML
      • http://www.bpmi.org
    • WSCI
      • http://www.w3.org/TR/wsci
    • BPEL4WS
      • http://www.ibm.com/developerworks/library/ws-bpel
bpel4ws
BPEL4WS
  • Supercedes XLANG (Microsoft) and WSFL (IBM)
  • Subset of BPML
  • XML-based programming language for creating an executable business process
    • Message oriented
    • XML-oriented
  • Basic activities
    • Receive, reply, invoke
    • Assign and copy
      • Messages
      • Properties (variables)
    • Faults – throw/catch model
bpel4ws45
BPEL4WS
  • Structured activities
    • Sequences
      • Execute sequentially
    • Flows with links
      • Executes a set of activities in parallel with dependencies controlled by links
    • Wait
      • For time-out period
      • Until a specific date
bpel4ws46
BPEL4WS
  • Structured Activities
    • While
      • Execute an activity while a condition is true
    • Switch
      • Condition behavior based on an expression
    • Pick
      • Waits for an event and executes the corresponding activity
      • Two types of event
        • A particular message
        • A timeout
bpel4ws47
BPEL4WS
  • Scopes
    • A way of grouping a set of activities
    • Can be nested
    • Can bind a compensation handler to a scope for long running transaction support
  • Containers
    • Mechanism for holding messages and passing them from one step to the next
bpel4ws48

Other Web Services and clients by PortType

partners

containers

faultHandlers

<partner>….</partner>*

<container>….</container>*

<catch>….</catch>*

Named storage for message

Pointer to application data that correlates a async request with a reply, e.g. accountid

correlationSets

<correlationSet>….</correlationSet>*

Alternate execution path when errors occur

Code to execute when "undoing" a transaction

compensationHandlers

<compensationHandler>…. </compensationHandler>*

What the process does. Typically, <sequence> or <flow>

(Activity)

BPEL4WS

Document Structure

Process

bpel4ws49
BPEL4WS

<process name="purchaseOrderProcess" …>

<partners> <partner name="Customer"

serviceLinkType="lns:MortgageAppLT"

myRole="MortgageService"/>

<partner name="CreditCheckProvider"

serviceLinkType="lns:CreditCheckLT"

myRole="CreditCheckRequester"

partnerRole="CreditCheckService"/>

</partners>

<containers>

<container name="MortgageApp" messageType="lns:POMessage"/>

</containers>

bpel4ws50
BPEL4WS

<sequence>

<receive partner="customer"

portType="lns:MortgageAppPT"

operation="sendMortgageApp"

container="MortgageApp">

</receive>

<invoke partner="CreditCheckProvider"

portType="lns:computePricePT"

operation="initiateCreditCheck"

inputContainer="MortgageApp">

</sequence>

</process>

agenda51

Directory

UDDI

Inspection

WSIL

Agenda

Web Services Architecture

Wire Stack

Description Stack

Discovery Stack

That’s All Folks…

Discovery Stack

web services discovery
Web Services Discovery
  • Supports the Publish, and Find
  • Provides the information needed for Bind
  • Discovery Scenarios
    • Global Directory – semantic Web
    • Private Business Exchange
      • E-marketplace
      • Consortium
      • Standards body
    • Portal – server side registry of business services
    • Business Partners – client side registry of business partners
    • Enterprise/Departmental
    • Test Environment
web services discovery53
Web Services Discovery
  • Multiple approaches – just need access to the WSDL document
  • Request it from the Provider
      • FTP
      • E-mail
      • Web Site, e.g. Open Edge WSTK
  • Web site based repository at well-known site
      • http://www.xmethods.net
      • http://www.salcentral.com
  • Site specific registry at service provider site
      • IBM\'s ADS
      • Microsoft\'s DISCO
      • Web Service Inspection Language – WSIL
  • Centralized dynamic registry
      • Universal Description Discovery and Integration (UDDI)
wsil discovery

Get inspection.wisl at www.progress.com

GET WISL

Response(WISL)

WSIL

WSDL

WSIL

WSDL

WSDL

WSDL

WSIL Discovery

Web Server

Web Server

ApplicationServer

Web Service Client

HTTP Listener

SOAP Processor

BusinessLogic

Business Interface

wsil discovery55

Get the Tech Support wsdl called techsupport.wsdl at www.progress.com

GET WSDL

Response(WSDL)

WSIL

WSDL

WSDL

WSDL

WSIL

WSDL

WSDL

WSIL Discovery

Web Server

Web Server

ApplicationServer

Web Service Client

HTTP Listener

SOAP Processor

BusinessLogic

Business Interface

web services inspection language wsil

WSIL

WSIL

WSIL

WSIL

WSIL

WSIL

Web Services Inspection Language (WSIL)
  • Proposed by IBM and Microsoft
    • http://www.ibm.com/developerworks/library/ws-wsilspec.html
  • When you know the host that you want to work with, e.g. www.progress.com
  • By convention look for inspection.wsil, e.g. http://www.progress.com/inspection.wsil
  • Supports linking of documents

Enterprise

Product Unit

Department

slide57
WSIL

<?xml version="1.0"?>

<inspection

xmlns="http://schemas.xmlsoap.org/ws/2001/10/inspection/"

xmlns:wsilwsdl=

http://schemas.xmlsoap.org/ws/2001/10/inspection/wsdl">

<service>

<name xml:lang="en-US">TechSupport</name>

<description

referencedNamespace=

"http://schemas.xmlsoap.org/wsdl/"

location=

"http://www.progress.com/TechSupport.wsdl">

</description>

</service>

</inspection>

slide58
UDDI

Universal Description, Discovery, and Integration

  • Framework for registering standards and services, discovering businesses, and integrating business services
    • SOAP-based API
    • Smart searches via categories and identifiers, e.g. find all bicycle manufactures
  • http://www.uddi.org
    • 220 member companies, including Progress
  • Replicated registry available today
    • IBM
    • Microsoft
    • SAP
slide59
UDDI
  • Supports dynamic discovery – service provider can be determined at runtime
    • e.g. Get the expense data for all subsidiaries
  • Several implementations available today
    • Open Source
    • Microsoft and IBM
    • Several others vendors, e.g. Systinet, Oracle, Cape Clear
  • Register/Find using
    • Browser
    • SOAP-based API
slide60
UDDI

5.

1.

Service requestors uses the fetched data to access the service they need.

Business Analysts, Standard Bodies, Service Providers register descriptions of different kinds of services.

UDDI Business Registry

4.

Service requestors query registry to find the services that they want.

"Business" registers which services they support.

2.

UBR assigns a UUID or other unique key to each service and business

3.

slide61
UDDI
  • UDDI Business Registry Data Model
    • White Pages
      • Basic contact information, e.g. Name, address, contact info
    • Yellow Pages
      • Categorizations used for discovery, e.g. bicycle manufacturer, book publisher, etc.
    • Green Pages
      • Technical details on the services that the business provides and how to access the service
      • Location of Web Service, e.g. the WSDL document
      • References a tModel
slide62
UDDI
  • Service Type Registration - tModels
    • Represents a set of technical specifications
    • What a programmer needs to know
    • Provided by standards bodies, market places, individual programmers, individual companies, etc.
    • A business or service that supports a tModel supports the corresponding specification
    • A Tmodel specification might be a WSDL document
    • Also used for categories and identifiers
uddi data model

Business Service

Yellow Pages

Service NameCategories

tModel

NameoverviewDocCategoriesIdentifiers

UDDI Data Model

Business Entity

All entries have UUID-based keys

White Pages

Basic Business InfoIdentifiersCategories

Binding Template

Green Pages

accessPoint

tModelKey

uddi categories
UDDI Categories
  • Allows a registry entry to be associated with a industry, product, or geographic code set
  • Search by category
  • Supported for Business Entity, Business Service, and tModel
  • Each category entry contains
    • Name
    • Value
    • Classification scheme via a tModel reference
      • NAICS – industries, e.g. goat farming
      • UNSPC – service and products, e.g. ice cream machine
      • ISO 3166 – geographic location, e.g. US-NH
      • UBR specific
uddi categories65
UDDI Categories

Name = "Skis"

Value= "49151502"

tModelKey="uuid:4e49a8d6-d5a2-4fc2-93a0-0411d8d19e388"

uddi identifiers
UDDI Identifiers
  • Used to uniquely identify a business or specification
  • Supported for Business Entity, and tModels
  • Identifier Schemes
    • DUNS – Dun & Bradstreet Number
    • Thomas Register
    • IRS Tax-Id
    • UBR Specific, e.g. marketplace unique id
uddi data model example

Business Service

Yellow Pages

Purchasing

UDDI Data Model Example

Business Entity

Name=Ski TownCategories Name=skis Value= 49151502tModelKey

White Pages

tModel

UNSPSCwww.unspsc.com

tModel

http:…skitown.wsdlCategories wsdlspec uddi-org:type tmodelKey

Binding Template

Green Pages

accessPoint https://www.skitown.com/purchasing

tModelKey

uddi api
UDDI Api
  • For all data model objects – business entity, business service, binding, tModel
  • Inquiry API and publisher API supports find, get, save, and delete operations
  • Smart search
    • By name
    • By category
    • By identifier
    • By key
agenda69
Agenda

Web Services Architecture

Wire Stack

Description Stack

Discovery Stack

That’s All Folks…

summary
Summary
  • Standards are still evolving
  • Working to solve the hard business integration problems
  • Look to tools to do the heavy lifting
web services resources
Web Services Resources
  • Books
    • Java Web Services by David Chappell & Tyler Jewell
    • Professional XML Web Services by Patrick Cauldwell et al
    • Essential XML Quick Reference by Aaron Skonnard
  • Links
    • http://www.xml.com
    • http://www.webservices.org
    • http://www.xml.com
    • http://www.ws-i.org
    • http://www.soapware.org
    • http://www.xmethods.com
slide72

!

All questionsanswered

ad