XML Web Services
Sono una tecnologia per l'interoperabilità tra applicazioni via HTTP, indipendente dal linguaggio e dalla piattaforma.
I WS portano informazioni
alle applicazioni degli utenti, così come i browser la portano agli
utenti. La promessa è quindi quella di rendere facile l'accesso delle applicazioni ai servizi offerti dai server.
Tecnicamente forniscono alle applicazioni un'interfaccia RPC (Remote Procedure Call) verso i metodi delle classi disponibili sul server.
Un WS espone un'API (Application Programming Interface) richiamabile tramite HTTP. L'API è descritta da
WSDL e i dati sono trasmessi via
SOAP (Simple Object Access Protocol),
quindi qualunque client che supporti SOAP può richiedere dati (tutti i broswer lo fanno).
Occorre ricordare che il web è 'stateless', quindi non supporta proprietà, ma solo parametri. Si usa perciò l'oggetto Session.
Le specifiche generali sono mantenute dal W3C:
http://www.w3.org/2002/ws.
- convertono una applicazione in una applicazione web
- usano protocolli aperti
- sono complete e indipendenti (self-contained e self-describing)
- possono essere usate da altre applicazioni su altre piattaforme
- sono basate su XML (code e decode) + SOAP (trasporto) + HTTP
- sono descritte da un linguaggio ad hoc: WSDL
- possono essere pubblicate, trovate e usate via HTTP (UDDI)
Web Services e .NET
http://www.west-wind.com/presentations/dotnetwebservices/DotNetWebServices.asp
Un Web Services .NET consiste in una pagina
.asmx che:
o contiene una classe
che fornisce la funzionalità
o fa riferimento a una classe esterna.
Le classi sono classi standard .NET, con la sola differenza che i metodi che si vuole esporre sono prefissati con [WebMethod]. .NET provvede a tutto e fornisce anche un'utile pagina informativa.
I WS .NET possono essere richiamati in 3 modi: HTTP GET, HTTP POST e SOAP.
Quest'ultimo è più complesso (occorre costruire e poi esaminare il documento SOAP, ma è più potente (trasporta oggetti complessi) e proprio.
Le applicazioni client semplicemente contengono un riferimento web, aggiungono il suo namespace e chiamano i suoi metodi. In realtà i metodi chiamano un oggetto
proxy, che a sua volta invoca il WS remoto; la classe di base del proxy contiene tutto quanto necessario per realizzare le chiamate SOAP e HTTP. Sul server è: il .NET framework che accoglie le richieste SOAP, instanzia la classe, avvia il costruttore e invoca il metodo, eseguendo anche le opportune conversioni di tipo.
In .NET ci sono due modi di creare WS: uno è creare servizi completi che usano una singola pagina .asmx che contiene sia l'header che il codice della classe; l'altro è di creare il solo header e fare riferimento a una classe esterna contenuta in un altro file, detto 'code behind' (VisualStudio usa quest'aultimo modo).
un esempio ASP.NET in VB
<%@ WebService Language="VB" Class="TempConvert" %>
dichiara il Web Service, il linguaggio usato e il nome della classe
Imports System
Imports System.Web.Services
importa il namespace
Public Class TempConvert :Inherits WebService
dichiara la classe e il suo tipo
la classe ha due funzioni:
<WebMethod()> Public Function FahrenheitToCelsius (ByVal Fahrenheit As Int16) As Int16
normale programmazione VB, con la sola novità della definizione WebMethod()
Dim celsius As Int16
celsius = ((((Fahrenheit) - 32) / 9) * 5)
Return celsius
End Function
<WebMethod()> Public Function CelsiusToFahrenheit
(ByVal Celsius As Int16) As Int16
Dim fahrenheit As Int16
fahrenheit = ((((Celsius) * 9) / 5) + 32)
Return fahrenheit
End Function
End Class
E' sufficiente salvare questo file su un server .NET con estensione
.asmx: ASP.NET crea
automaticamente il WSDL e la richesta SOAP.
Non solo il programma funziona nella lingua giusta, ma spiega il funzionamento e mostra
WSDL.
e, se esegui il programma, mostra anche il
SOAP.
Le due funzioni possono essere richiamate direttamente specificando l'operazione
http://www.w3schools.com/webservices/tempconvert.asmx?op=FahrenheitToCelsius
http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit
o via post con una form come se ogni operazione fosse una pagina a sè stante:
<form target="_blank"
action='http://www.w3schools.com/webservices/tempconvert.asmx/FahrenheitToCelsius'
method="POST"><table><tr><td>Fahrenheit to Celsius:
<input class="frmInput" type="text" size="30" name="Fahrenheit">
<input type="submit" value="Submit" class="button">
</td></tr></table></form>
un esempio ASP.NET in c#
<%@ WebService Language="c#" Class="WS1" %>
dichiara il Web Service, il linguaggio usato e il nome della classe
using System;
using System.Web;
using System.Web.Services;
public class WS1 {
dichiara la classe e il suo tipo - la classe ha tre funzioni:
normale programmazione, con la sola novità della definizione [WebMethod]
[WebMethod]
public string CiaoMondo(string lcName) {
return "Hello World, " + lcName;
}
[WebMethod]
public decimal Addizione(decimal lnNumber1, decimal lnNumber2) {
return lnNumber1 + lnNumber2;
}
[WebMethod]
public DateTime OraDelServer() {
return DateTime.Now;
}
}
prova WS1.asmx su questo server