Web Services Technology Stack
(WSDL and UDDI)
Shahram Esmaeilsabzali
(sesmaeil@[Link])
What we will cover
WSDL and its elements
UDDI registries and APIs
A Web service using [Link] and C#
Web services conceptual stack
Other business rules
Web Services Flow Language (WSFL, XLANG and )
Universal Description, Discovery and Integration (UDDI)
Web Services Description Language (WDSL)
Simple Object Access Protocol (SOAP)
Extensible Markup Language (XML)
Common Internet Protocols (TCP/IP, HTTP, )
Core
Emerging
WSDL
Defined in a joint effort by Ariba, IBM and
Microsoft
An XML format for describing Web Services
interfaces as collection of ports
WSDL = IDL + Binding + Service location
IDL: types and operations
Binding: how to access via protocol (E.g. SOAP, HTTP POST
or HTTP GET)
Location: Where to connect to the Web service
WSDL works over multiple protocols and
technologies using extensibility elements
WSDL Elements
Abstract Elements:
Types: Data type Definition
Messages: Format of Data being communicated
Operations: Description of an action
Port types: set of operations
Concrete Elements:
Bindings: a concrete protocol and data format
specification for a particular port type
Ports: a single endpoint defined as combination of
Binding+ Network address
Services: a collection of related ports (endpoints)
WSDL Elements Relationship
Abstract Reusable Elements
Concrete Elements
Types
Encloses data type definitions that are building blocks
of exchanged messages
W3C XML Schema as canonical type system
Also allows type systems other than XML Schema to be
added via extensibility elements
<wsdl:types> ?
<wsdl:documentation .... />?
<xsd:schema .... />*
<-- extensibility element --> *
</wsdl:types>
Messages
Messages consist of one or more logical parts
part name is a unique name among all other parts
of a message
Each part is associated with a type or Element
Parts are a flexible mechanism for describing the
logical abstract content of a message
Using XML Schema as type system, WSDL uses:
Element: Refers to an XML Schema element
Type: Refers to an XML Schema simple or complex type
<wsdl:message name="nmtoken"> *
<wsdl:documentation .... />?
<part name="nmtoken" element="qname"? type="qname"?/> *
</wsdl:message>
Example
ExchangeRate C# class is exposed as an [Link]
Web Service by simply Placing the below C# code in
a .asmx file. This file is then put in a directory of an
[Link] web application (Simple scenario)
<%@ WebService Language="C#" Class="ExchangeRate" %>
using system
using [Link]
[WebService(Namespace=[Link]
public class ExchangeRate
{
[WebMethod]
public float ExchangeRateRequest (string SourceCurrencySymbol,
string TargetCurrencySymbol)
{
return 0.7;
// real application makes a database call to retrieve exchange rate
}
Example
<types>
<schema targetNamespace= "[Link]
xmlns="[Link]
<element name="ExchangeRateRequest">
<complexType>
<sequence>
<element name="SourceCurrencySymbol" type="string"/>
<element name="TargetCurrencySymbol" type="string"/>
</sequence>
</complexType>
</element>
<element name="ExchangeRateRequestResponse">
<complexType>
<all>
<element name="ExchangeRateRequestResult" type="float"/>
</all>
</complexType>
</element>
</schema>
</types>
<message name="ExchangeRateRequestSoapIn">
<part name="body" element="ExchangeRateRequest"/>
</message>
<message name="ExchangeRateRequestSoapOut">
<part name="body" element= "ExchangeRateRequestResponse"/>
</message>
PortType
Port Types are set of operations and the messages
involved
WSDL has four transmission primitives
(operations):
One-way
Request-response
Solicit-response
Notification
One-way Operation
The endpoint receives a message
They are the simplest mechanism, and it is
supported only by MIME protocol (HTTP
based protocols are two-way)
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name="nmtoken">
<wsdl:input name="nmtoken"? message="qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
Request-response
The endpoint receives a message, and sends
a correlated message
input element: abstract request message
output element: abstract response message
fault element: optional abstract error message
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name="nmtoken" parameterOrder="nmtokens">
<wsdl:input name="nmtoken"? message="qname"/>
<wsdl:output name="nmtoken"? message="qname"/>
<wsdl:fault
name="nmtoken" message="qname"/>*
name="nmtoken">
<wsdl:portType
</wsdl:operation>
<wsdl:operation
name="nmtoken" .... /> *
</wsdl:portType >
</wsdl:portType>
</wsdl:definitions>
Solicit-response operation
The endpoint sends a message, and receives
a correlated message
Output: Abstract solicit request message
Input: Abstract response message
fault element: optional abstract error message
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name="nmtoken" parameterOrder="nmtokens">
<wsdl:output name="nmtoken"? message="qname"/>
<wsdl:input name="nmtoken"? message="qname"/>
<wsdl:fault name="nmtoken" message="qname"/>*
name="nmtoken">
<wsdl:portType
</wsdl:operation>
<wsdl:operation>name="nmtoken" .... /> *
</wsdl:portType
</wsdl:portType>
</wsdl:definitions>
Notification Operation
The endpoint receives a message
<wsdl:definitions .... >
<wsdl:portType .... > *
<wsdl:operation name="nmtoken">
<wsdl:output name="nmtoken"? message="qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
WSDL Elements Relationship
Abstract Reusable Elements
Concrete Elements
Binding
A binding defines message format and protocol
details for operations and messages defined by
a particular portType
<wsdl:definitions .... >
<wsdl:binding name="nmtoken" type="qname"> *
<-- extensibility element (1) --> *
<wsdl:operation name="nmtoken"> *
<-- extensibility element (2) --> *
<wsdl:input name="nmtoken"? > ?
<-- extensibility element (3) -->
</wsdl:input>
<wsdl:output name="nmtoken"? > ?
<-- extensibility element (4) --> *
</wsdl:output>
<wsdl:fault name="nmtoken"> *
<-- extensibility element (5) --> *
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>
Ports
A port defines an individual endpoint by
specifying a single address for a binding.
Ports are building blocks of Web services
Within a Service they have the following
relationships:
None of ports communicate with each other (WSDL
specification requirement)
Several ports could implement a single portType
ports can be examined by consumer for checking their
desired operations
<wsdl:port name="nmtoken" binding="qname">*
<wsdl:documentation .... /> ?
<-- extensibility element -->
</wsdl:port>
Service
A service groups a set of related ports
together
<wsdl:service name="nmtoken"> *
<wsdl:documentation .... />?
<wsdl:port name="nmtoken" binding="qname"> *
<wsdl:documentation .... /> ?
<-- extensibility element -->
</wsdl:port>
<-- extensibility element -->
</wsdl:service>
Example
<portType name="ExchangeRateSoapPort">
<operation name="ExchangeRateRequest">
<input message="ExchangeRateRequestSoapIn"/>
<output message="ExchangeRateRequestSoapOut"/>
</operation>
</portType>
<binding name="ExchangeRateSoapBinding" type="ExchangeRateSoapPort">
<soap:binding style="document" transport="[Link]
<operation name="ExchangeRateRequest">
<soap:operation soapAction="[Link]
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ExchangeRate">
<port name="ExchangeRateSoap" binding="ExchangeRateSoapBinding">
<soap:address location="[Link]
</port>
</service>
Import element
Import element allows the separation of elements
in a WSDL document
It is a good practice to have at least two separate
WSDL documents: Service interface definition
and Service implementation definition
Using Import, introduces features for reusability
and abstract interface definitions like object
oriented programming
Multiple businesses may implement and advertise
the same WSDL interface and service requesters
could effectively search for their desired service
Web services conceptual stack
Other business rules
Web Services Flow Language (WSFL, XLANG and )
Universal Description, Discovery and Integration (UDDI)
Web Services Description Language (WDSL)
Simple Object Access Protocol (SOAP)
Extensible Markup Language (XML)
Common Internet Protocols (TCP/IP, HTTP, )
Core
Emerging
What is UDDI?
UDDI defines a set of services supporting the
description and discovery of:
Businesses, organizations, and other Web services
providers (White Pages)
Web services which businesses make available
(Yellow Pages)
Technical interfaces which may be used to access
those Web services (Green Pages)
UDDI is based on a set of web standards including
HTTP, XML, XML Schema, WSDL and SOAP,
and is supported by many companies (HP, IBM,
Microsoft and )
What is UDDI?
UDDI specification provides a platformindependent way of describing, discovering and
integrating Web services using Internet
UDDI Infrastructure is appropriate for both public
and private Web Services-based environments
UDDI data is hosted by nodes which could be
collected, using replication mechanism, to form
UDDI registries
UDDI provides a set of APIs for inquiring and
manipulating UDDI elements
UDDI core data structures
All Data structures are
XML based
Many UDDI data
structures including
the four core data
structures are accessed
via unique identifiers
that are either
generated by registries
or by the publisher
itself
UDDI core data
structures support
mechanisms for
electronic signatures
( XML-Signature
syntax )
UDDI tModel
Technical models or tModels are
essential UDDI elements used to
represent unique concepts,
constructs or metadata
tModels are represented by their
unique keys
tModels are extensibility means for
UDDI
tModels are reusable entities which
can be referenced by other entities
like bindingTemplates
The bindingTemplates referencing
the same tModels are said to have
the same technical fingerprints
Their typical applications are in
WSDL definition, dynamic
categorization and search systems
(identifierBags and CategoryBags)
tModels can be used to extend
existing categorization and search
systems for entities
UDDI businessEntity structure
Each businessEntity contains
descriptive information
about a business or
organization and, through its
contained businessService
entities, information about
the services that it offers.
identifierBag element allows
businessEntity structures to
be identified according to
published identifier systems
(E.g. DUNS numbers), the
systems themselves are
registered tModels elements
The categoryBag contains a
predefined list of business
categorization that each
describes a specific business
aspect of the businessEntity.
Examples of categories are
industry, product category or
geographic regions
UDDI businessServices structure
The businessService
structure represents a
logical service and
contains descriptive
information in business
terms.
A
businessService is the
logical child of a single
businessEntity
A businessService may be
projected to other
businessEntities by
reference instead of
containment.
Projections to the same
service can be made in any
number of business
entities.
bindingTemplates is a list
of technical descriptions
for the Web services.
UDDI bindingTemplate Structure
Technical descriptions of Web
services are provided by
bindingTemplate entities.
The accessPoint element is an URI,
typically a URL, representing the
network address of the Web service
being described. There are four types
of accesspoints:
endpoint (Network address of Web
service)
bindingTemplate
hostingDirector
WSDL Deployment
tModelInstanceDetails element
contains the technical fingerprint of
the Web service.
During an inquiry, interested
parties can use this information to
look for bindingTemplate entities that
contain a specific fingerprint or partial
fingerprint.
UDDI APIs
UDDI APIs are programmatic tools for querying
and manipulating UDDI registry data
UDDI APIs are exposed as SOAP messages over
HTTP or HTTPS
UDDI APIs are categorized to six groups:
Inquiry APIs: Locates and obtains details of UDDI data
Publishing APIs: Publishes and updates UDDI data
Security APIs: Requests and discards authentication data
Custody transfer APIs: Transfers ownership of elements
Subscription APIs: provides clients with information about
changes in UDDI data
Value set APIs: Checks the validity of referenced tModels
Some UDDI APIs
Inquiry API
Find things
find_business
find_service
find_binding
find_tModel
find_relatedBusinesses
Get Details about things
get_businessDetail
get_serviceDetail
get_bindingDetail
get_tModelDetail
get_operationalInfo
Publishers API
Save things
add_publisherAssertions
set_publisherAssertions
save_business
save_service
save_binding
save_tModel
Delete things
delete_business
delete_service
delete_binding
delete_tModel
delete_publisherAssertion
Query things
get_assertionStatusReport
get_publisherAssertions
get_registeredInfo
Example
<businessService
businessKey="uddi:[Link]:ExchangeRateCo"
serviceKey="uddi:[Link]:service">
<name>ExchangeRate </name>
<description> This Service Exchanges rates </description>
<bindingTemplates>
<bindingTemplate servicekey=uddi:[Link]:service
bindingKey="uddi:[Link]:binding">
<description xml:lang="en">
This is a Binding for ExchangeRateService
</description>
<accessPoint useType=wsdlDeployment>
[Link]
</accessPoint>
<tModelnstanceDetails>
<tModelnstanceInfo
tModelKey="uddi:[Link]:serviceInterface">
</tModelnstanceInfo>
</tModelnstanceDetails>
</bindingTemplate>
</bindingTemplates>
</businessService>
How does it work?
Service
Provider
(5) Execute Service
(SOAP)
(1) Publish (WSDL)
(3) Retrieve Service
Description (WSDL)
UDDI
(0) Create the
Web Service
Service
Requester
(2) Find Service and
Retrieve its address (UDDI)
(4) Create Proxy class
Web services and Proxy classes
Proxy classes are generated according to WSDL
information to call the Web services on behalf of
the service requesters
Proxy classes hide the complexity of dealing with
SOAP, XML and network protocols
Once Proxy classes are generated, they are
compiled (in this case to a .NET DLL file) and can
be used by other programs
Some proxy classes settings can be modified at
run-time; so for example, if the location of a Web
service is changed proxy class is not required to be
regenerated
Accessing a Web Service with [Link] page
<%@ Page Language = C# Debug=true %>
<%@ Import namespace = CurrencyExchange %>
<script Language=C# runat=server>
void GetExchangeRate ([Link] sender, [Link] e)
{
ExchangeRate ws = new ExchangeRate();
[Link] = [Link] ([Link], [Link]);
}
</script>
<html>
<body>
<form id=Form1 method=post runat=server>
<strong> Enter the source and destination currency symbols</strong> <br />
<asp:TextBox id = txtsource runat=server> </asp:TextBox> <br />
<asp:TextBox id = txtdest runat=server> </asp:TextBox> <br />
<asp:Button id= Button1
runat=server
Text=Submit
onClick=GetExchangeRate > <br />
....
</html>
Web Services future
While Web services have
focused on technological
foundations for
implementing simple Web
services, they are not
sufficient for using Web
services in critical business
application, the following
are important areas of
research in Web services :
Web Services
Composition
mechanisms for Web
Services work flow
and coordination
comprehensive
security solutions
Web services
transactions
Other business rules
Web Services Flow Language (WSFL, XLANG and )
Universal Description, Discovery and Integration (UDDI)
Web Services Description Language (WDSL)
Simple Object Access Protocol (SOAP)
Extensible Markup Language (XML)
Common Internet Protocols (TCP/IP, HTTP, )
Core
Emerging
A comparison
CBD technologies
No standard format for data
exchange and encoding
RPC mechanisms
IDL
Registry information
Partly platform independent
and usually extremely tightlycoupled
Complex transfer and
conversation protocols
CDB paradigm Provides
solutions for wide area of
applications
WS technologies
Uniform encoding mechanism
XML
SOAP
WSDL
UDDI
Platform neutral, highly
loose-coupled and crossplatform technology
Using easy open-standard
protocols
Existing WS technology is
suitable for rather simple
applications