740 likes | 938 Vues
Visual Basic.NET ASP.NET Web Services February 25, 2004. Agenda – February 25, 2004. Homework or Other Questions? (Cookies?) Evolution of Visual Basic.NET Programming ASP.NET Web Services HelloService Class Exercise What is SOAP? Web Service Directive
E N D
Agenda – February 25, 2004 • Homework or Other Questions? (Cookies?) • Evolution of Visual Basic.NET Programming • ASP.NET Web Services • HelloService Class Exercise • What is SOAP? • Web Service Directive • WSDL (Web Services Description Language) • Web Services Presentation • Web Service Class Exercise • Final Homework / Class Project
Console Application Command Window Console Application
Windows Form Application Input Screen Windows Form Class
Windows Form with Class DLL Input Screen Class Constructors Fields Windows Form Class Get Set Properties Methods
Windows Form, Class DLL, and ADO Class Input Screen Constructors Fields Get Set Properties Windows Form Class Methods Database
WebForm Application Browser (IE6) WebForm Class Code Behind File
WebForm, Class DLL, and ADO Class Browser (IE6) Constructors Fields Get Set Properties WebForm Class Methods Database Code Behind File
Web Services using localhost Class Browser (IE6) Constructors Fields Get Set Properties SOAP WebForm Class Web Service Proxy Methods Database Code Behind File
Web Services using Remote Host Client Server Class Browser (IE6) Constructors Fields Get Set Properties SOAP WebForm Class Web Service Proxy Methods Database Code Behind File
Web Services • Web Services are a new way of performing remote procedure calls over HTTP • Web Services make use of SOAP (Simple Object Access Protocol). SOAP is an XML-based standard that details how method calls are made over HTTP in a reproducible manner • Web Services are completely described using WSDL (Web Service Description Language) • Web Services are able to use the full array of Visual Basic, C# and .NET techniques over the server.
Web Services. • A web service is an application that exposes a Web-accessible API (i.e. a class method). • The key is that it is Web-accessible, not just browser-accessible. • Another way of looking at a .NET web service is that it is a unit of managed code, typically installed under IIS, that can be remotely invoked using HTTP. • A Web service is language agnostic. • All you care about is invoking the service with the input parameters formatted correctly, and parsing the output (if any).
Web Services Architecture Windows Client SOAP Messages Server Web Service Web Server (IIS) Browser Client Request Handler Web Service Other Client
Anatomy of a Web Service • In .NET, a web service is implemented by one or more assemblies, just like any other library. • In addition, some additional infrastructure is needed: • A wire protocol – used to transmit your service request and receive a response. (i.e. HTTP/GET, HTTP/POST or SOAP). • A description service – so clients can programmatically access and examine the interface contract. • A discovery service – so clients can programmatically discover the existence of web services.
Web Service Security • Project Files are stored in assemblies • Support for strongly named assemblies • Stored in GAC (Global Assembly Cache) found in C:\WINDOWS\assembly • Using Public / Private Key Pairs (Kerberos) • Assembly Signed with the Private Key • Assembly is Opened with the Public Key • Guaranteed to be the correct Assembly
Let's Look at Converting this Simple Code into a Web Service Imports System Class Hello Public Function HelloMessage() As String Return ("Hello .NET Web Service") End Function End Class
The HelloService.asmx File <%@ WebService Language="VB" Class="HelloService" %> 'Imports System 'Imports System.Web.Services Public Class HelloService Inherits System.Web.Services.WebService <System.Web.Services.WebMethod()> _ Public Function HelloMessage() As String Return ("Hello .NET Web Service") End Function End Class
Steps to Implement • Save the above text in a file named hello.asmx file in the C:\Inetpub\wwwroot directory • Access the web service by specifying the .asmx file in the URL (i.e. http://localhost/simplehello.asmx) • Invoking the web service this way automatically generates a web page that specifies the message format, and gives you a convenient invocation button for simple parameters. (i.e. it only supports a GET) • Notice that the response is wrapped in XML
SOAP(Simple Object Access Protocol) Remote objects can give a program almost unlimited power over the Internet, but most firewalls block non-HTTP requests. SOAP, an XML-based protocol, gets around this limitation to provide intraprocess communication across machines.
SOAP(Simple Object Access Protocol) • Traditionally, HTTP is the application level protocol used between web-clients and web servers. • Web clients are now more than browsers requesting HTML. • HTTP is fairly simple, restricted to requesting and sending resources with GET, PUT and POST, but is not designed for flexible exchange of data between applications. • The Simple Object Access Protocol (SOAP) aims to fix this by defining a protocol that any application can use to communicate and exchange data with any other application
SOAP(Simple Object Access Protocol) • SOAP is a simple, lightweight XML-based protocol for exchanging structured and type information on the Web. • SOAP uses XML Grammar tailored for exchanging web service data • .NET Web Service usually sends SOAP messages over HTTP • SOAP Protocol was originally developed by Compaq, HP, IBM, Lotus, Microsoft, and others
SOAP(Simple Object Access Protocol) • To achieve maximum flexibility, SOAP uses XML syntax to format its content. • SOAP is designed to be: • As simple as possible • Provide a minimum functionality • Therefore SOAP is both modular and flexible. • However, the SOAP protocol does not include anything on security or transactions
SOAP(Simple Object Access Protocol) • Since SOAP is an application level protocol, it can run on any transport e.g. TCP. • The protocol defines a messaging framework that contains no application or transport semantics. As a result, the protocol is modular and very extensible. • Since SOAP messages are XML, which is plain text, they can easily pass through firewalls • SOAP is not limited to name/value pairs as HTTP-GET and HTTP-POST are, but can send complex objects including datasets, classes, and other objects. • SOAP focuses on the ability to send messages from a sender to a recipient. The use of SOAP as an RPC mechanism is purely a byproduct of this functionality. RPC-like behavior is achieved by sending messages in both directions.
SOAP(Simple Object Access Protocol) • One negative to using SOAP is that messages tend to be verbose, because of the nature of XML. • If bandwidth or transmission performance is an issue, HTTP-GET or HTTP-POST maybe better choices. • .NET Frameworks provides a class, the SoapHttpClientProtocol for using the SOAP protocol in your clients. • .NET Frameworks provides a number of classes for interacting with HTTP protocol, including a hierarchy of classes for SOAP, HTTP-GET and HTTP-POST client protocols, all deriving from WebClientProtocol and HttpWebClientProtocol.
Structure of a SOAP Message SOAP Envelope SOAP Header Header parts SOAP Body Payload SOAP Fault
Structure of a SOAP message • The Envelope is the top-level container representing the message. • The Header is a generic container for added features to a SOAP message in a decentralized manner. SOAP defines attributes to indicate who should deal with a feature and whether understanding is optional or mandatory. • The Body is a container for mandatory information intended for the ultimate message receiver. SOAP defines one element for the body to report errors, called a SOAP Fault.
SOAP styles • SOAP can have 2 styles • Document-style SOAP, which is used to simply exchange XML data. • RPC-style SOAP, which is used to make an RPC request and get it’s response. • Both styles of SOAP messages look the same, but the body of an RPC style SOAP message has some rules around how requests/responses are tagged.
A Basic SOAP Message <SOAPENV:Envelope xmlns:SOAPENV="http://schemas.xmlsoap.org/soap/envelope/"/><SOAPENV:Body> <StockQuoteRequest symbol="FOO"/></SOAPENV:Body> </SOAPENV:Envelope> • This message has just an envelope and a body. • The SOAP envelope namespace has to be specified to make this a valid SOAP message. • This shows a document-style SOAP message.
SOAP Faults and .NET exceptions • Any .NET exception that is thrown on the web service side is automatically wrapped in a SOAPException, so it can be serialized as a SOAP Fault. • The InnerException chain is lost. • One way to transmit meaningful information is to catch exceptions at the Web Service, and re-throw a SOAPException, with additional information stuck into the Details element of the SOAPException class. • The receiving side can parse out the SOAP fault detail.
SOAP Specification http://www.w3.org/TR/soap
WSDL (Web Services Description Language) • The XML Web services infrastructure is founded on communication via XML-based messages that comply with a published service description. • The service description is an XML document written in an XML grammar called WSDL (Web Services Description Language) that defines the format of messages the XML Web service understands. • The service description serves as an agreement that defines the behavior of an XML Web service and instructs potential clients in how to interact with it. • The service description also specifies what the service consumer can expect to happen when a properly formatted message is submitted to the XML Web service.
WSDL File Document Elements • A Web Service is described with a WSDL File. The following elements are involved in a WSDL document. • definitions – root element of a WSDL document. • types – optional element can be used to define the data types used to describe the messages exchanged by this service. • message – describes the messages exchanged by this service. Elements that represent the request and response, one per protocol (SOAP, HTTP GET and HTTP POST). • portType – defines a set of abstract operations (i.e. a single round-trip query and response), giving it a name. • binding – connects an abstract message to its message and transport (i.e. SOAP, HTTP GET, HTTP POST). Generally one binding element per transport. • service – maps each portType to its binding, associates a port and binding to a location (URL) where the service can be reached. • documentation – contains additional human readable information about the service. • import – allows a WSDL document to include the contents of another.
WSDL in Visual Studio.NET In Visual Studio.NET, for most part, you can ignore the details of the WSDL file and concentrate on implementing the service.
WSDL Specification http://www.w3.org/TR/wsdl
Web Service Directive <%@ WebService Language="VB" Class="Hello" %> Required for all web services • Directive Name WebService • Variable number of attribute/value pairs • Language (C#, VB, JS, VJ#, ...) C# is default • Class (required, class in either the .asmx or code-behind file, the code-behind file must be compliled and stored in the ./bin subdirectory)
WebService Attribute • Optional • Provides additional information to be added to the Web Service • Properties: • Description Property • Name Property • Namespace Property
WebMethod Attribute Imports System.Web.Services Public Class HelloService Inherits System.Web.Services.WebService <WebMethod(BufferResponse:=False)> _ Public Function HelloMessage() As String • the Method must be public • the WebMethod attribute has a number of properties