Soap and the Future of Distributed Processing on the Internet Mohammed El-Affendi Dept of Computer Science, CCIS, PSU Topics Covered What is a distributed application? Evolution of distributed applications. The famous RPC. Architectures of distributed systems and applications. CORBA and COM: interoperability. XML and SOAP. WEB services What is a distributed application? A distributed application is an application that runs on several interconnected machines, but appears to its user as if it were running on a single machine. This is called a true distributed application. Network Applications? In network applications, the network is transparent. The user knows that he is using a network. Transparency is the major difference between distributed and network applications. Architecture of distributed systems and applications: Distributed systems may be based on existing OS’s and protocols or built from scratch. (Distributed Unix versus Amoeba). They may be based on monolithic or thin kernels. Function Calls in Distributed Systems: The Famous RPC: Remote Procedure Calls (RPC’s): Client Program Client Calls Functions Server Program Stub Marshall Transport 1 0 1 0 1 unmarshall Transport The CORBA Standard and Distributed Objects: The OMG designed CORBA as a standard for interoperability between distributed objects. The main motivation is to allow applications to call functions implemented by other distributed applications using a standard interface specification. COM and DCOM: Microsoft introduced a similar de facto standard commonly known as COM. The main motivation behind COM is to allow binaries to interoperate through exported interface specifications, in a manner independent of the programming language and platform. COM and DCOM: Another motivation is to allow applications to control each other easily. COM assumes that the interoperating applications are on the same machine. DCOM is an extension of COM across networks and the Internet. DCOM clients may call procedures and functions implemented by DCOM servers on other machines. DCOM Clients and Servers: The user should not worry about communication details: Client Server Problems with COM and CORBA: One problem with COM and CORBA is that they are competing standards which are not compatible. Another problem is that in many cases they may not be able to cross firewall boundaries. Enter SOAP: Due to the above problems, people have been looking for a more versatile solution acceptable by all. The answer has been “SOAP”. SOAP stands for “Simple Object Access Protocol” In one sentence: SOAP=XML + HTTP. SOAP: The main idea behind SOAP is to utilize two widely accepted standards to facilitate interoperability across the Internet. The first of these is the XML standard for describing data (I will explain shortly). The other standard is nothing but the widely accepted WEB protocol: the famous HTTP. SOAP: In what follows, I will briefly describe XML and the HTTP and then come back to SOAP. However, one point to remember is that the HTTP is one of the very few protocols that can cross firewalls. XML: XML is all about structured, selfdescribing data Data which must be structured are the method calls and return data Many implementations available to process XML What is XML XML stands for “eXtensible Markup Language” XML Language is a text-based format that lets developers describe, deliver and exchange structured data between a range of applications and clients for local display and manipulation. XML also facilitates the transfer of structured data between servers themselves. XML resembles and complements HTML. XML describes data, while HTML defines tags that describe how the data should be displayed. XML: XML, however, allows developers to define an unlimited set of tags, bringing great flexibility to authors, who can decide which data to use and determine its appropriate standard or custom tags. HTML uses a frozen set of tags that are difficult to extend. XML example: The following simple example shows how XML is used to describe a weather report: <weather-report> <date>16, Sept, 2001</date> <time>12:45</time> <area> <city> Sharjah </city> <region> North. Reg</region> <country> UAE </country> </area> XML Example: <measurements> <skies>partly cloudy</skies> <temperature>46</temperature> <wind> <direction>SW</direction> <windspeed>6</windspeed> </wind> <humidity>40</humidity> <visibility>10</visibility> </measurements> </weather-report> Why XML XML is simple Open, Standards Based Text-based and human readable Much like TCP/IP, HTTP, HTML XML makes data more important than code and is good for describing data XML enables powerful Web applications and is available on (almost) all platforms XML will be the format and the data model for all information flowing across applications, via messages, and through the web Namespaces Solves the “naming” and “sharing” problems Makes XML very extensible Enables developers to mix data described by multiple schemas in one XML instance Schema components are reusable in other schemas Qualifies data elements uniquely <B:Title>Learning XML</B:Title> <C:Title>Dr.</C:Title> Namespaces URI’s are used for Scoping. Uniform Resource Identifiers (URIs) Uniform Resource Name (URN) Location Independent, need not equate to anything. Uniform Resource Locator (URL) Location hints are embedded in identifier Using Namespaces To define a namespace for an element: Define the xmlns attribute and assign it a Uniform Resource Identifier (URI) <root> <bk:BOOK xmlns:bk="urn:BookStore.org:BookInfo" xmlns:money="urn:Finance:Money"> <bk:TITLE>A Suitable Boy</bk:TITLE> <bk:PRICE>22.95</bk:PRICE> HTTP Internet’s Request/Response Protocol Ubiquitous cross-platform/language support Highly scalable server-side implementations are available Simple and Extensible protocol Typically the only thing allowed through firewalls A basic HTTP scenario User-Agent establishes TCP connection to Server Typically over port 80 User-Agent sends HTTP request message to Server Server processes request and sends back HTTP response message An HTTP endpoint is identified by a Uniform Resource Locator (URL): http://www.affendi.net/test/mmm.asp HTTP operations HTTP 1.1 supports several built-in methods GET and POST most common POST requests typically contain a body used to pass information along with request GET can only pass information using a Query String HTTP messages HTTP request and response messages have headers & optional body Headers contain method (GET/POST), URL and HTTP version. Headers are text-based name:value pairs Headers are CRLF delimited Body starts after CRLFCRLF sequence Content-Length/-Type headers indicate size and MIME type Sample HTTP messages GET /test/mmm.asp HTTP/1.1 Host: WWW.affendi.NET POST /test/display.asp HTTP/1.1 Host: WWW.affendi.NET Content-Length: 12 Content-Type: text/plain Hello, World HTTP responses HTTP responses begin with a status line containing a numeric code and description 2xx: Success 4xx: User-Agent Error – Request contains bad syntax or cannot be fulfilled 5xx: Server Error – The server failed to fulfill an apparently valid request HTTP/1.1 200 OK Also 1xx and 3xx codes. Content-Length: 12 Content-Type: text/plain Hello, World Back to SOAP: Now Back to SOAP. SOAP version 1.1 Specifies a simple and lightweight XML messaging protocol for exchanging structured and typed information. Bindable to many transports Designed as an RPC mechanism HTTP is currently the primary transport Extensible Based upon its envelope structure SOAP Spec consists of 4 parts An extensible envelope (XML) expressing A set of encoding rules for data Defines how data is represented in XML. A convention for representing Remote Procedure Calls what is the message and what are its features whether the features are optional or mandatory. Defines how calls and returns are packaged in XML. A protocol binding to HTTP What SOAP messages over HTTP look like SOAP HTTP Message Structure SOAP Message The complete SOAP Message HTTP Headers Standard HTTP and SOAP HTTP Headers SOAP Envelope <Envelope> encloses payload SOAP Header Headers SOAP Body Message Name & Data <Header> encloses headers Individual headers <Body> contains SOAP Message Name & Data XML Encoded SOAP Message Name & Data A Simple Request Example: <SOAP:Envelope xmlns:SOAP="urn:schemasxmlsoap-org:soap.v1"> <SOAP:Header></SOAP:Header> <SOAP:Body> <m:GetSalesTax xmlns:m="urn:myserver/soap:TaxCalc"> <SalesTotal>100</SalesTotal> </m:GetSalesTax> </SOAP:Body> </SOAP:Envelope A Simple Response Example: <SOAP:Envelope xmlns:SOAP="urn:schemas-xmlsoaporg:soap.v1"> <SOAP:Header></SOAP:Header> <SOAP:Body> <m:GetSalesTaxResponse xmlns:m= "urn:myserver/soap:TaxCalc"> <SalesTax>4</SalesTax> </m:GetSalesTaxResponse> </SOAP:Body> </SOAP:Envelope> Sample SOAP (HTTP) Message POST /sample/soapdemo.asp HTTP/1.1 Host: www.ctmsdev.net Content-type: text/xml Content-length: nnn SOAPAction: Some-uri#MethodName <SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/ SOAP-ENV:encodingStyle=http://schemas.xmlsoap.org/soap/encoding/> <SOAP-ENV:Header> </SOAP-ENV:Header> <SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP Headers Headers are optional Open-ended set of header entries Associate special processing instructions with the request Can be used for security, transactions, etc… Or any other special information that applies to processing this message Individual header entry can be optional/mandatory mustUnderstand=“1” indicates the recipient must understand this instruction and obey it or fail processing. Sample SOAP Message -Header <SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/ SOAP-ENV:encodingStyle=http://schemas.xmlsoap.org/soap/encoding/> <SOAP-ENV:Header> <mynms:CurrIndex xmlns:myns=“My-uri” SOAP-ENV:mustUnderstand=“1”>3</myns:CurrIndex> </SOAP-ENV:Header> <SOAP-ENV:Body> … </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP Body Always mandatory This is where the method call and response are encoded Errors can be reported on the response Sample SOAP Request <SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/ SOAP-ENV:encodingStyle=http://schemas.xmlsoap.org/soap/encoding/> <SOAP-ENV:Header> … </SOAP-ENV:Header> <SOAP-ENV:Body> <m:MethodName xmlns:m=“Some-uri”> <x>3</x> <y>4</y> </m:MethodName> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Sample SOAP Response HTTP/1.1 200 OK Content-Type: text/xml Content-Length: nnn <SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/> <SOAP-ENV:Body xmlns;m=“Some-uri”> <m:MethodNameResponse> <return>24</return> </m:MethodNameResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP Types SOAP specification specifies Simple as well as Compound Types Simple types are defined in the section of “Built-in data types” of “XML Schema Part 2: Datatypes” String, int, boolean,float, etc… Compound Types are either Structs or Arrays In Structs, the element names distinguish the different elements In Arrays, the Ordinal postion serves to distinguish among the elements WEB Services: SOAP made it possible to implement RPC’s across the Internet. Using SAOP, an application may transparently call a function implemented in server somewhere on the Internet. Companies are now utilizing this feature to provide “WEB Services”. WEB Services: A WEB service is simply a WEB application or method callable across the Internet. The vehicle is of course SOAP. What is the Significance of this? The main significance of this is that the Internet is being transformed from a network system into a huge global distributed system that may host a wide variety of distributed applications. Users may now build distributed applications that consists of components that reside on other machines and platforms. What is the Significance of this? Software may now be provided as a subscription service. You license an application for a period of time rather than buying it. Users may be able to control their environments and do a wide range of things that were not possible before. A huge amount of services will shortly be available across the Internet. Current web applications Browsers App Code Internet Browsers Web app developers took advantage of these local services and used HTML to “project” the UI to lots of clients. OS, Core Services and Data Historically, most development efforts have been directed toward building apps using rich local services. The Web Services View Vertical and Portal Services App Code OS and Local Services Internet Application Specific Web Services Building Block Web Services Web Services are building blocks that enable developers to build and aggregate applications and services from local and remote resources for a range of clients. Browsers Devices What are Web Services? A web-addressable resource that provide data and functions for programmatic access. WEB Services: UDDI DISCO Client Program Server Program WSDL Proxy Transport Stub SOAP 1 0 1 0 1 Transport Building Block Standards XML Standard way to represent information Used to build all other protocols HTTP Transport Layer Scalable Web Service Protocols Simple Object Access Protocol (SOAP) Web Services Description Language (WSDL) Remote Procedure Calls Describe Web Services Discovery Protocols DISCO Tied to a particular URL UDDI Universal Description Discovery and Integration Building Web Service catalogs and finding Web Services from central repositories Web Service Infrastructure Reliability Security Routing Process Orchestration (XLANG) Directory (UDDI) SOAP (XML Protocols) Service Description (WSDL) XML XML Schemas XML HTTP XML Communication Description Packaging Disco Discovery What are Web Services? Building blocks for constructing distributed applications Independent of platform, object model and language Based upon open Internet Standards Internet or Intranet Loosely coupled Higher levels of application integration Software as a service The programmable web Web Services Commerce Collaboration Transact business Leverage your experience Access data Publish Transform the way you conduct business Integrate the Web with business systems Get your information on the Web Security Chasm Business Chasm V A L U E Illustrating the Idea: A Simple LookUp Example: Methods: LookUp • FindPerson • GetPersonList Web Service Specifications HTTP – transport XML – packaging SOAP – method/response format WSDL – services and types UDDI and DISCO (Web) Services Description Language Need a way to describe Web Services As documentation for the Web Service For Tools / Platforms to automate the details of communication WSDL 1.0 is a new standard for doing this. A Service Description fragment – Service Description <serviceDescription xmlns:s0="http://tempuri.org/main.xsd" xmlns:s1="" name="WebService1" targetNamespace="" xmlns="urn:schemas-xmlsoap-org:sdl.2000-01-25"> <soap xmlns="urn:schemas-xmlsoap-org:soap-sdl-2000-01-25"> <service> <addresses> <address uri="http://localhost/websx/webservice1.asmx"/> </addresses> <requestResponse name="FindPerson“ soapAction="http://tempuri.org/FindPerson"> <request ref="s0:FindPerson"/> <response ref="s0:FindPersonResult"/> </service> </soap> A Service Description fragment -- Types <schema targetNamespace="http://tempuri.org/main.xsd" xmlns="http://www.w3.org/1999/XMLSchema"> <import namespace="http://www.w3.org/1999/XMLSchema"/> <element name="FindPerson"> <complexType> <element name="strEmail" type="string" nullable="true"/> </complexType> </element> <element name="FindPersonResult"> <complexType> <element name="result" type="s0:Person"/> </complexType> </element> <complexType name="Person"> <element name="strEmail" type="string" nullable="true"/> <element name="strFirstName" type="string" nullable="true"/> <element name="strLastName" type="string" nullable="true"/> </complexType> Discovery Used to locate a Web Service’s description DISCO is targeted discovery UDDI is a centralized services directory Looking directly at a particular site Web crawlers Geared toward finding standard services from a centralized registry UDDI defines an API executed via SOAP UDDI hold pointers to the details (WSDL or DISCO) Let’s look at DISCO a bit further DISCO in practice HTTP request <discovery> information about resource </discovery> http://resource Sample DISCO Documents <?xml version="1.0" ?> <discovery xmlns="http://schemas.xmlsoap.org/disco/"> <contractRef ref="/calc/Calc.asmx?sdl" docRef="/calc/Calc.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" /> </discovery> <?xml version="1.0" ?>- <discovery xmlns="http://schemas.xmlsoap.org/disco/"> <discoveryRef ref="/CPPWS/CPPWS.disco" /> <discoveryRef ref="/Calc/Calc.disco" /> <discoveryRef ref="/CalcForm/CalcForm.disco" /> <discoveryRef ref="/Calculator/Calculator.disco" /> <discoveryRef ref="/CPPWS/CPPWS.disco" /> <discoveryRef ref="/WA1/WA1.disco" /> <discoveryRef ref="/WS1/WS1.disco" /> <discoveryRef ref="/WS2/WS2.disco" /> </discovery> App Code Application Specific Web Services SDLASP The Toolkit enables you to: • Expose Web services by generating an XML service description from a COM component’s type library • Consume Web services automatically in VB by turning the contract into a programmable proxy with a Remote Object Proxy Engine (ROPE) • Receive SOAP requests from a SOAP client (e.g., the proxy) with an ASP or ISAPI “listener” Vertical and Portal Services SDLASP ROPE SOAP SDLASP Local Services The SOAP Toolkit Building Block Web Services Browsers Devices Thanks Thank you for attending and listening. WaSalamu Alaikum Wa Rahmatu Allah.