Web Services Erdogan Dogdu CSC 4360/6360 Computer Science Department Georgia State University (Adapted from Mark Sapossnek (Boston Uni.) presentation) Learning Objectives Understand the coming Web Services revolution Fundamentals of Web Services Be able to create and debug a Web Service Using the .NET Framework SDK Using Visual Studio.NET Using Sun Microsystem’s Java Web Services Development Pack (JWSDP) Agenda Web Services Overview Underlying Technologies Developing a Web Service Consuming Web Services Miscellaneous .NET My Services Demo using Sun’s JWSDP Web Services Overview Business Today CEO challenges Revamp customer service Overhaul supply chain Speed up the decision process CIO challenges Reorient IT architecture Connect with a limitless number of external constituents Extend processes to external constituents Web Services Overview Internet Business Processes Span Companies Web Services Overview Technology Fabric Must Span Companies Too Web Services Overview Drivers Companies, suppliers, partners, and customers must be able to work together Faster than ever before Over the Internet Or risk “death by isolation” Leverage Internet cost structure Web Services Overview Possible Solutions Distributed computing Web sites (portals) Web Services Web Services Overview Distributed Computing Client/server model Doesn‘t scale Not secure Distributed object model Components: packaging and interoperability Remoting: remote method invocation COM, CORBA, Java RMI and EJB Not Internet-friendly Interoperability issues: poor/non-existent standards Tightly coupled: still doesn‘t scale Web Services Overview Distributed Computing 3-tier Application Architecture Great way to build scalable Web applications But such applications are silos Integration is an afterthought They can be integrated behind the firewall Even that can be a problem They do not provide a way to integrate across the firewall (i.e. over the Internet) Web Services Overview Portals Ads Mail Other Svcs Calendar Weather Finance News Web Services Overview Portal Limitations No standard way to expose functionality Integration is expensive and error-prone Hard to outsource Not designed to be used outside original scope The problem? HTML is designed for presentation to people Can’t repurpose it in a general, reliable way Don’t even think about screen scraping Web Services Overview What Is a Web Service? The solution? Web Services! A Web Service exposes functionality to a consumer Over the Internet or intranet A programmable URL Functions you can call over the Internet Based on Web standards HTTP, XML, SOAP, WSDL, UDDI, with more to come Can be implemented in any language on any platform Black boxes Component-like, reusable Web Services Overview What Is a Web Service? A Web Service combines the best features of distributed computing and portals and eliminates the worst Provides a mechanism for invoking methods remotely Uses Web standards (e.g. HTTP, XML) to do so Web Services Overview What Is a Web Service? Web Services allow you to interconnect: Different companies Many/any devices Applications Different clients Not just browsers Distribution and integration of application logic Enable the programmable Web Not just the purely interactive Web Web Services are loosely coupled Web Services Overview What is a Web Service? New paradigm for Internet development Deliver applications as services Richer, customer-driven experience Continuous delivery of value/bits Third-generation Internet Web Services Overview Evolution of the Web HTML, XML HTML HTML HTML, XML Generation 1 Generation 2 Generation 3 Static HTML Web Applications Web Services Web Services Overview Benefits Everyone Leverage existing infrastructure “Build or buy” development decisions Minimize development time/costs Enterprises Integration imperative Dynamic, easy B2B relationships New Web-based businesses Greater personalization New services/new revenue streams Be “everywhere” vs. single destination Web Services Overview Possibilities Scenario: Planning a trip Go to Expedia site (or Travelocity, or …) Log in. Find the flights you want Don’t have to reenter seat/meal/airline/frequent flyer/… info System can find lowest price fare by looking at your calendar(s) Purchase tickets w/o entering credit card # Flight info automatically added to your calendar and your spouse’s calendar Book rental car/hotel w/your preferences; added to calendar On day of trip get notified of flight status via email/toast/pager/cell phone Web Services Overview Application Model Partner Web Service Other Web Services Internet + XML End Users YourCompany.com Application Business Logic Tier Data Access and Storage Tier Other Applications Partner Web Service Web Services Overview Sample Web Services E-commerce: order books, office supplies, other products Track packages: UPS, FedEx Weather Maps Telephone redirection, customizable rules and messages Agenda Web Services Overview Underlying Technologies Developing a Web Service Consuming Web Services Miscellaneous .NET My Services Underlying Technologies XML Is the Glue Connectivity Connect the Web Presentation Browse the Web Connecting Applications Program the Web Underlying Technologies Web Services Stack (Standards) Directory: Publish & Find Services: UDDI Description: Formal Service Descriptions: WSDL Wire Format: Service Interactions: SOAP Universal Data Format: XML Ubiquitous Communications: Internet Simple, Open, Broad Industry Support Underlying Technologies Web Services Stack Discovery Directory allows potential clients to locate relevant Web Services UDDI A Description language defines the format of methods provided by a Web Service WSDL Underlying Technologies Web Services Stack UDDI Description WSDL http://www.ibuyspy.com/ibuyspycs/InstantOrder.asmx?wsdl Request Service Description Return Service Description (XML) Wire Format Request Service Return Service Response (XML) SOAP Web Service Web Service Client Link to Discovery Document (XML) UDDI or other directory service Directory http://www.uddi.org Locate a Service Underlying Technologies Web Service Wire Format The Web Service Wire Format specifies how specific messages are exchanged HTTP-GET HTTP-POST SOAP HTTP-GET and HTTP-POST use a minimal HTTP interface to invoke Web Services Limited support for data types SOAP provides a robust HTTP/XML interface Extensive support for data types XML Overview XML Basics XML is designed to represent and transfer structured data In HTML: <p>Jan 15, 2000 </p> In XML: <OrderDate>Jan 15, 2000</OrderDate> XML does not display or transform data XML separates data from formatting and transforming HTML and XML are both derived from SGML In different ways XML Overview XML Syntax XML is composed of tags and attributes Tags can be nested Representing entities, entity properties, and entity hierarchy <ROOT> <Orders OrderID="10643" CustomerID="ALFKI" EmployeeID="6" OrderDate="1997-08-25T00:00:00" RequiredDate="1997-09-22T00:00:00" ShippedDate="1997-09-02T00:00:00" /> </ROOT> XML Overview XML Schemas XML schemas describe the structure of an XML document XML schemas describe the tag and attribute specifications Simple and compound data types XML schemas also describe constraints on the contained text XML schemas and the DTD are mutually exclusive SOAP Overview A lightweight protocol for exchanging information in a distributed, heterogeneous environment It enables cross-platform interoperability Interoperable OS, object model, programming language neutral Hardware independent Protocol independent Works over existing Internet infrastructure SOAP Overview Guiding principle: “Invent no new technology” Builds on key Internet standards SOAP ≈ HTTP + XML SOAP 1.2, W3C working draft Tutorial: http://www.w3.org/TR/2002/WD-soap12-part0-20020626/ The SOAP specification defines: The SOAP message format How to send messages How to receive responses Data encoding SOAP SOAP Is Not… Objects-by-reference Message-oriented Complicated Doesn’t try to solve every problem in distributed computing Can be easily implemented SOAP The HTTP Aspect SOAP requests are HTTP POST requests POST /WebCalculator/Calculator.asmx HTTP/1.1 Content-Type: text/xml SOAPAction: “http://tempuri.org/Add” Content-Length: 386 <?xml version=“1.0”?> <soap:Envelope ...> ... </soap:Envelope> SOAP Message Structure SOAP Message The complete SOAP message Headers Protocol binding headers SOAP Envelope <Envelope> encloses payload SOAP Header Headers SOAP Body Message Name & Data <Header> encloses headers Individual headers <Body> contains SOAP message name XML-encoded SOAP message name & data SOAP SOAP Message Format An XML document using the SOAP schema: <?xml version=“1.0”?> <soap:Envelope ...> <soap:Header ...> ... </soap:Header> <soap:Body> <Add xmlns=“http://tempuri.org/”> <n1>12</n1> <n2>10</n2> </Add> </soap:Body> </soap:Envelope> SOAP Server Responses Server replies with a “result” message: HTTP/1.1 200 OK ... Content-Type:text/xml Content-Length: 391 <?xml version=“1.0”?> <soap:Envelope ...> <soap:Body> <AddResult xmlns=“http://tempuri.org/”> <result>28.6</result> </AddResult> </soap:Body> </soap:Envelope> SOAP Encoding Complex Data Data structures are serialized as XML: <soap:Envelope ...> <soap:Body> <GetStockDataResult xmlns=“http://tempuri.org/”> <result> <Description>Plastic Novelties Ltd</Description> <Price>129</Price> <Ticker>PLAS</Ticker> </result> </GetStockDataRseult> </soap:Body> </soap:Envelope> SOAP Security and Features Builds on HTTP Security HTTPS Developers / IT choose which methods to expose explicitly Does not pass application code Firewall-friendly Type safe SOAP Industry Support Sun Microsystems DevelopMentor Inc. Digital Creations IONA Technologies PLC Jetform ObjectSpace Inc. Rockwell Software Inc. SAP Compaq Microsoft Rogue Wave Software Inc. Scriptics Corp. Secret Labs AB UserLand Software Inc. Zveno Pty. Ltd. IBM Hewlett Packard Intel SOAP Example of a SOAP Request POST /StockQuote HTTP/1.1 Host: www.stockquoteserver.com Content-Type: text/xml; charset="utf-8" Content-Length: nnnn SOAPAction: "Some-URI“ <SOAP-ENV:Envelope xmlns:SOAPENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV: encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:GetLastTradePrice xmlns:m="Some-URI"> <symbol>DIS</symbol> </m:GetLastTradePrice> </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP Example of a SOAP Response HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: nnnn <SOAP-ENV:Envelope xmlns:SOAP-ENV= "http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV: encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"/> <SOAP-ENV:Body> <m:GetLastTradePriceResponse xmlns:m="Some-URI"> <Price>34.5</Price> </m:GetLastTradePriceResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP Example of a SOAP Error HTTP/1.1 500 Internal Server Error Content-Type: text/xml; charset="utf-8" Content-Length: nnnn <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode> SOAP-ENV: MustUnderstand </faultcode> <faultstring>SOAP Must Understand Error </faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope> WSDL Web Services Description Language XML schema for describing Web Services 1. Service interface definition – 2. Abstract semantics for Web Service Service implementation definition – Concrete end points and network addresses where Web Service can be invoked Clear delineation between abstract and concrete messages WSDL WSDL Schema Interface Implementation <definitions> <definitions> <import> <import> <types> <service> <message> <portType> <binding> <port> WSDL WSDL Schema Interface • <definitions> are root node of WSDL <definitions> • <import> allows other entities for inclusion <import> • <types> are data definitions xsd <types> • <message> defines parameters of a Web Service function <message> <portType> • <portType> defines input and output operations <binding> • <binding> specifies how each message is sent over the wire WSDL WSDL Schema Implementation • <service> specifies details about the implementation • <port> contains the address itself <definitions> <import> <service> <port> WSDL WSDL Elements Open – allows for other namespaces and thus highly extensible Ability to import other schemas & WSDL Provides “recipe” for Web Services Provides both interface and implementation details Allows for separation of the two WSDL Example Demo: MyHello service on db.gsu.edu http://db.gsu.edu:8080/hello-jaxrpc/hello?WSDL UDDI Overview UDDI = Universal Description, Discovery, and Integration Industry Initiative to address discovery A registration database for Web Services Specifications Schema for service providers and descriptions API for publishing and searching Developed on industry standards (XML, HTTP, TCP/IP, SOAP) Applies to both XML and non-XML services Implementation Public and private instances of specification UDDI The Vision Advanced Discovery via Portals and Marketplaces Marketplace UDDI Registries and Protocol Marketplace Marketplace Search Portal Search Portal Business Users Technical Users UDDI UDDI Information Model Provider: Information about the entity who offers a service tModel: Descriptions of specifications for services. 1…n 0…n Service: Descriptive information about a particular family of technical offerings 0…n Binding: Technical information about a service entry point and construction specs Bindings contain references to tModels. These references designate the interface specifications for a service. UDDI UDDI Schema Interface Implementation <businessEntity> <businessService> <tModel> <bindingTemplate> <businessService> <tModel> <bindingTemplate> UDDI How UDDI Works: tModel tModel = Technology Model Generic meta-data structure to uniquely represent any concept or construct Also includes interface protocol definitions Powerful abstraction modeling system Examples: WSDL files, XML schema, namespaces, categorization schemes UDDI <tModel> <tModel> represents meta-data and interfaces <tModel xmlns="urn:uddi-org:api" tModelKey="UUID:AAAAAAAA-AAAAAAAA-AAAA-AAAAAAAAAAAA"> <name>microsoft-com:creditcheck</name> <description xml:lang="en">Check credit limits</description> <overviewDoc> <overviewURL>http://schema.com/creditcheck.wsdl </overviewURL> </overviewDoc> <categoryBag> <keyedReference tModelKey="UUID:CD153257-086A-4237-B336-6BDCBDCC6634" keyName="Consumer credit gathering or reporting services" keyValue="84.14.16.01.00"/> <keyedReference tModelKey="UUID:C1ACF26D-9672-4404-9D70-39B756E62AB4" keyName="types" keyValue="wsdlSpec"/> </categoryBag> </tModel> UDDI Providers, Services And Bindings Providers Examples: Accounting Department, Corporate Application Server Name, Description, Contact Information Categorization and Identification Information Services Examples: Purchase Order services, Payroll services Name, Description(s) Categorization Information Bindings Description(s), access points, parameters Examples: Access Point (http://...) for Web Service UDDI <bindingTemplate> <bindingTemplate> represents data and implementation details <bindingTemplate serviceKey="33c3d124-e967-4ab1-8f51d93d95fac91a" bindingKey="48f2bc6b-a6de-4be8-9f2b2342aeafaaac"> <accessPoint URLType="http"> http://localhost/HelloWorld/Service1.asmx </accessPoint> <tModelInstanceDetails> <tModelInstanceInfo tModelKey="uuid:64c756d1-33744e00-ae83-ee12e38fae63“/> </tModelInstanceDetails> </bindingTemplate> UDDI Important UDDI Features Neutral in terms of protocols – as a registry, it can contain pointers to anything Can search by business, service, Web Service (tModel), binding Usage of Globally Unique Identifiers (GUIDs) Specification allows public and private nodes Delineation between interface and implementation Agenda Web Services Overview Underlying Technologies Developing a Web Service Consuming Web Services Miscellaneous .NET My Services Demo for Sun’s JWSDP Developing a Web Service Basics Web Service Implemented in ASP.NET Similar to Web Forms, but have a .asmx file extension contains code, w/o UI Lives in a virtual directory Can have a code-behind ASP.NET provides simple test harness ASP.NET automagically generates WSDL Can use .NET Framework classes and custom assemblies and classes Developing a Web Service Code and Syntax Codebehind <%@ WebService Language="c#" Codebehind="MyWebService.cs" Class="FirstWebService.MathService" %> Inline (in C#) <%@ WebService Language=“C#“ Class=“MathService“ %> using System.Web.Services; public class MathService : WebServices { [WebMethod] public int Add(int num1, int num2) { return num1 + num2; } } Developing a Web Service Demo Demo: HelloWorld.asmx Demo: MathService.asmx Developing a Web Service Tools Notepad Just create a .asmx file Visual Studio.NET Create ASP.NET Web Service project Agenda Web Services Overview Underlying Technologies Developing a Web Service Consuming Web Services Miscellaneous .NET My Services Consuming Web Services Overview Locate the desired Web Service UDDI DISCO (Microsoft .NET specific) Get detailed description of Web Service WSDL Create a proxy that represents the Web Service Proxy has the same methods/arguments/return values as the Web Service Application instantiates and uses the proxy as if it were a local object Consuming Web Services Overview Web Service Developer Create with WSDL.exe Web Application Developer Web Server S .asmx Service App Web Server C Proxy .cs Web Form .aspx Service Application Consuming Web Services Overview Web Services are URL addressable HTTP request/response Can request WSDL via URL Can invoke via: HTTP-GET HTTP-POST HTTP-SOAP Consuming Web Services Invoking via HTTP-GET HTTP-GET http://localhost//MathService.asmx/Multiply?a=11&b=11 Result is an XML document <?xml version="1.0" encoding="utf-8" ?> <int xmlns="http://www.microsoft.com/MathService/">121</int> Consuming Web Services Invoking via HTTP-POST HTTP-POST POST /MathService.asmx/Multiply HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: length a=11&b=11 Result is an XML document <?xml version="1.0" encoding="utf-8" ?> <int xmlns="http://www.microsoft.com/MathService/">121</int> Consuming Web Services Invoking: HTTP-SOAP XML grammar for WebMethod, Method parameter, results Supports all standard .NET datatypes and value classes Additionally: classes, structs, datasets Class and struct marshalling Serialization in XML format Consuming Web Services Type Marshalling Using HTTP-GET or HTTP-POST Primitive types E.g. int, string, float, double, byte, … Enum types Arrays of primitives and enums By-value only Consuming Web Services Type Marshalling Using SOAP Primitive types Enum types Classes and structs DataSet XmlNode Arrays of all of the above By-value and by-reference are supported Consuming Web Services Trying It Out Request without method name or parameters ASP.NET returns a page listing all methods http://localhost/MathService.asmx Click one of the methods and you can test it out http://localhost/MathService.asmx?op=Multiply Specify parameters and Invoke Only for primitive data types Sample requests/responses Consuming Web Services Trying It Out Request with parameter “WSDL” Formal WSDL description of Web Service XML-based grammar Can be used as input for wsdl.exe http://localhost/MathService.asmx?WSDL Consuming Web Services Creating a Proxy Use wsdl.exe to generate a proxy wsdl http://localhost/MathService.asmx?WSDL Creates MathService.cs Contains MathService class, derived from SoapHttpClientProtocol in the System.Web.Services.Protocols namespace Or HttpGetClientProtocol or HttpPostClientProtocol You can instantiate these classes dynamically Proxy embeds URL to the Web Service in the constructor Consuming Web Services Using Visual Studio.NET Use Add Web Reference to search UDDI or to discover Web Services given a URL This builds a proxy, and you can start using the Web Service immediately Visual Studio.NET essentially calls disco.exe and wsdl.exe for you Consuming Web Services Demos Demo: TestServices.sln Consumes: MathService.asmx Consumes: DataService.asmx Agenda Web Services Overview Underlying Technologies Developing a Web Service Consuming Web Services Miscellaneous .NET My Services Demo for Sun’s JWSDP Miscellaneous State Management Web Services are stateless Use ASP.NET session state mechanism What is a session? Functionality Restricted to a logical application Context in which a user communicates to a server Request identification and classification Store data across multiple requests Session events Release of session data .NET State Server Process Miscellaneous Security Model Reasons for security Prevent access to areas of your Web server Record and store secure relevant user data Security configuration Authentication, Authorization, Impersonation Web Client IIS ASP.NET App Code Access Security Are you the code you told me you are? .NET OS Miscellaneous HTTP and Firewalls Client U DCOM Service Port 80 Web Service U RMI Service Firewall Miscellaneous Secure Sockets Layer Raw HTTP Client <soap:Body> <AddResult xmlns= ...> <result>28.6</result> </AddResult> </soap:Body> SSL Client <soap:Body> <AddResult xmlns= ...> <result>28.6</result> </AddResult> </soap:Body> Web Service Web Service Miscellaneous Security Model Similar to securing a Web site Clients are computers and businesses Possible options with IIS IPSec Basic Basic over SSL Digest Integrated Client certificates Passport? Miscellaneous Transactions Like ASP.NET Web Forms COM+ services COM+ automatic transactions atomic, consistent, isolated, durable (ACID) SQL Server Application Web Service COM+ transaction context MSMQ Server Miscellaneous Transactions [WebMethod(Transaction= Transaction.Required)] Transaction modes Supported NotSupported Required RequiresNew Miscellaneous Execution Model Synchronous Like any other call to class methods Asynchronous Split the method into two code blocks BeginMethodName EndMethodName CLR determines if operation has finished Miscellaneous SOAP Toolkit An SDK for building Web Services using Visual Studio 6.0 Components allowing an ASP page to act as a facade for a COM object Wizard for generating WSDL descriptions from COM servers Client-side engine for dynamically creating an Automation proxy from WSDL Miscellaneous SOAP Toolkit Available at http://msdn.microsoft.com/downloads/defau lt.asp?URL=/code/sample.asp?url=/msdnfiles/027/001/580/msdncompositedoc.xml Easily expose COM components as Web Services through SOAP and schemas Client infrastructure for Visual Studio Focused on one way of creating Web Services Miscellaneous SOAP Toolkit Remote Object Proxy Engine (ROPE) A set of COM components you can use to build SOAP messaging into your application Client-side infrastructure to build Web Services Server side infrastructure Greatly simplifies SOAP programming You can use SOAP without using ROPE Agenda Web Services Overview Underlying Technologies Developing a Web Service Consuming Web Services Miscellaneous .NET My Services Demo for Sun’s JWSDP .NET MyServices What If You Could… Access the entire Internet with one password Buy anything instantly Be alerted of the things you care about Change your address in one place Use a single calendar across your work and family .NET MyServices How Would That Change Your Business? Reach new customers Provide better service Create revolutionary new applications Gain competitive advantage Differentiate your company .NET My Services creates the opportunity to do things that couldn’t be done before .NET MyServices Motivation ? ? ? ? Users have multiple technology islands Inconsistent, impersonal, user not in control Islands don’t work well together .NET MyServices User-Centric Web Services .NET Alerts .NET Inbox .NET Calendar .NET Application Settings .NET Contacts .NET Documents .NET Lists .NET Devices .NET Categories .NET FavoriteWebsites .NET Location .NET Passport .NET Presence .NET Profile .NET Wallet .NET MyServices .NET Alerts Available Now Alerts are a better way to touch customers so they can act on new info quickly Product shipment Outbid at an auction … User in control Routed based on user preferences Users opt-in and cannot be spammed You can reach a huge customer base today MSN Messenger has more than 40 million users Many other end-points: Windows XP, cell phones… Alerts SDK here now; test cloud coming later this year On the road to .NET My Services Conclusion Web Services Overview Underlying Technologies Developing a Web Service Consuming Web Services Miscellaneous .NET My Services Resources Web Services Essentials http://msdn.microsoft.com/library/default.asp?URL= /library/techart/webservicesessentials.htm SOAP http://msdn.microsoft.com/soap SOAP Specification http://www.w3.org/TR/SOAP/ Don Box on SOAP http://msdn.microsoft.com/msdnmag/issues/0300/soap /soap.asp Introduction to SOAP http://www.w3.org/2000/xp/Group/Admin/minutes-oct1100 /soap-xp-wg_files/frame.htm Resources WSDL Specification http://www.w3.org/TR/wsdl Sun Microsystems: http://java.sun.com/webservices IBM: http://www.ibm.com/webservices Microsoft: http://www.microsoft.com/webservices A Quick Introduction to WSDL http://msdn.microsoft.com/library/default.asp?url=/library /enus/soap/htm/soap_overview_72b0.asp?frame=true UDDI http://www.uddi.org http://uddi.microsoft.com Resources HailStorm http://www.microsoft.com/net/hailstorm.asp Building Web Services with SOAP and ASP.NET http://msdn.microsoft.com/msdnmag/issues/01/02/WebC omp/webcomp.asp GXA Web Services Specifications http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnsrvspec/html/wsspecsover.asp?frame=true