Esercitazione sui servizi Web SOAP: che cos'è il protocollo SOAP? ESEMPIO

Sommario:

Anonim

Cos'è SOAP?

SOAP è un protocollo basato su XML per l'accesso ai servizi Web su HTTP. Ha alcune specifiche che potrebbero essere utilizzate in tutte le applicazioni.

SOAP è noto come Simple Object Access Protocol, ma in tempi successivi è stato semplicemente accorciato a SOAP v1.2. SOAP è un protocollo o in altre parole è una definizione di come i servizi web parlano tra loro o parlano con le applicazioni client che li invocano.

SOAP è stato sviluppato come linguaggio intermedio in modo che le applicazioni costruite su vari linguaggi di programmazione potessero parlare facilmente tra loro ed evitare l'estremo sforzo di sviluppo.

In questo tutorial sui servizi Web SOAP imparerai:

  • Introduzione SOAP
  • Vantaggi di SOAP
  • Blocchi di SOAP
  • Struttura del messaggio SOAP
  • Elemento busta SOAP
  • Modello di comunicazione SOAP
  • Esempio pratico di SOAP

Introduzione SOAP

Nel mondo di oggi, esiste un numero enorme di applicazioni costruite su diversi linguaggi di programmazione. Ad esempio, potrebbe esserci un'applicazione web progettata in Java, un'altra in .Net e un'altra in PHP.

Lo scambio di dati tra le applicazioni è fondamentale nel mondo in rete di oggi. Ma lo scambio di dati tra queste applicazioni eterogenee sarebbe complesso. Così sarà la complessità del codice per realizzare questo scambio di dati.

Uno dei metodi utilizzati per combattere questa complessità è utilizzare XML (Extensible Markup Language) come linguaggio intermedio per lo scambio di dati tra le applicazioni.

Ogni linguaggio di programmazione può comprendere il linguaggio di markup XML. Quindi, XML è stato utilizzato come supporto sottostante per lo scambio di dati.

Ma non ci sono specifiche standard sull'uso di XML in tutti i linguaggi di programmazione per lo scambio di dati. È qui che entra in gioco il software SOAP.

SOAP è stato progettato per funzionare con XML su HTTP e dispone di una sorta di specifica che potrebbe essere utilizzata in tutte le applicazioni. Analizzeremo ulteriori dettagli sul protocollo SOAP nei capitoli successivi.

Vantaggi di SOAP

SOAP è il protocollo utilizzato per lo scambio di dati tra le applicazioni. Di seguito sono riportati alcuni dei motivi per cui viene utilizzato SOAP.

  • Quando si sviluppano servizi Web basati su SOAP, è necessario disporre di un po 'di linguaggio che può essere utilizzato per consentire ai servizi Web di dialogare con le applicazioni client. SOAP è il mezzo perfetto che è stato sviluppato per raggiungere questo scopo. Questo protocollo è raccomandato anche dal consorzio W3C, che è l'organo di governo per tutti gli standard web.
  • SOAP è un protocollo leggero utilizzato per lo scambio di dati tra le applicazioni. Nota la parola chiave " luce ". Poiché la programmazione SOAP si basa sul linguaggio XML, che a sua volta è un linguaggio di scambio dati leggero, quindi SOAP come protocollo che rientra anche nella stessa categoria.
  • SOAP è progettato per essere indipendente dalla piattaforma ed è progettato anche per essere indipendente dal sistema operativo. Quindi il protocollo SOAP può funzionare con qualsiasi applicazione basata su linguaggio di programmazione sia su piattaforma Windows che Linux.
  • Funziona con il protocollo HTTP -SOAP funziona con il protocollo HTTP, che è il protocollo predefinito utilizzato da tutte le applicazioni web. Pertanto, non è necessario alcun tipo di personalizzazione per eseguire i servizi Web basati sul protocollo SOAP per funzionare sul World Wide Web.

Blocchi di costruzione SOAP

La specifica SOAP definisce qualcosa noto come " messaggio SOAP ", che è ciò che viene inviato al servizio Web e all'applicazione client.

Il diagramma seguente dell'architettura SOAP mostra i vari elementi costitutivi di un messaggio SOAP.

Blocchi per la creazione di messaggi SOAP

Il messaggio SOAP non è altro che un semplice documento XML che ha i componenti seguenti.

  • Un elemento Envelope che identifica il documento XML come messaggio SOAP - Questa è la parte contenente il messaggio SOAP e viene utilizzata per incapsulare tutti i dettagli nel messaggio SOAP. Questo è l'elemento principale nel messaggio SOAP.
  • Un elemento di intestazione che contiene informazioni di intestazione: l'elemento di intestazione può contenere informazioni come le credenziali di autenticazione che possono essere utilizzate dall'applicazione chiamante. Può anche contenere la definizione di tipi complessi che potrebbero essere utilizzati nel messaggio SOAP. Per impostazione predefinita, il messaggio SOAP può contenere parametri che potrebbero essere di tipo semplice come stringhe e numeri, ma può anche essere un tipo di oggetto complesso.

Di seguito è riportato un semplice esempio di servizio SOAP di tipo complesso.

Supponiamo di voler inviare un tipo di dati strutturato che avesse una combinazione di un "Nome tutorial" e una "Descrizione tutorial", quindi definiremmo il tipo complesso come mostrato di seguito.

Il tipo complesso è definito dal tag dell'elemento . Tutti gli elementi richiesti della struttura insieme ai rispettivi tipi di dati vengono quindi definiti nella raccolta di tipi complessi.

  • Un elemento Body che contiene informazioni sulla chiamata e sulla risposta: questo elemento contiene i dati effettivi che devono essere inviati tra il servizio Web e l'applicazione chiamante. Di seguito è riportato un esempio di servizio Web SOAP del corpo SOAP che funziona effettivamente sul tipo complesso definito nella sezione dell'intestazione. Ecco la risposta del nome del tutorial e della descrizione del tutorial inviati all'applicazione chiamante che chiama questo servizio web.
Web ServicesAll about web services

Struttura del messaggio SOAP

Una cosa da notare è che i messaggi SOAP vengono normalmente generati automaticamente dal servizio Web quando viene chiamato.

Ogni volta che un'applicazione client chiama un metodo nel servizio web, il servizio web genererà automaticamente un messaggio SOAP che avrà i dettagli necessari dei dati che verranno inviati dal servizio web all'applicazione client.

Come discusso nell'argomento precedente di questo tutorial SOAP, un semplice messaggio SOAP ha i seguenti elementi:

  • L'elemento Envelope
  • L'elemento di intestazione e
  • L'elemento del corpo
  • L'elemento Fault (opzionale)

Diamo un'occhiata a un esempio di seguito di un semplice messaggio SOAP e vediamo cosa fa effettivamente l'elemento.

Struttura del messaggio SOAP
  1. Come si vede dal messaggio SOAP sopra, la prima parte del messaggio SOAP è l'elemento busta che viene utilizzato per incapsulare l'intero messaggio SOAP.
  2. L'elemento successivo è il corpo SOAP che contiene i dettagli del messaggio effettivo.
  3. Il nostro messaggio contiene un servizio web che ha il nome di "Guru99WebService".
  4. Il "Guru99Webservice" accetta un parametro di tipo "int" e ha il nome di TutorialID.

Ora, il messaggio SOAP sopra verrà passato tra il servizio Web e l'applicazione client.

Puoi vedere quanto sono utili le informazioni di cui sopra per l'applicazione client. Il messaggio SOAP dice all'applicazione client qual è il nome del servizio Web, e anche quali parametri si aspetta e qual è il tipo di ogni parametro che viene preso dal servizio web.

Elemento busta SOAP

Il primo pezzo del blocco di costruzione è l'involucro SOAP.

La busta SOAP viene utilizzata per incapsulare tutti i dettagli necessari dei messaggi SOAP, che vengono scambiati tra il servizio Web e l'applicazione client.

L'elemento busta SOAP viene utilizzato per indicare l'inizio e la fine di un messaggio SOAP. Ciò consente all'applicazione client che chiama il servizio Web di sapere quando termina il messaggio SOAP.

I seguenti punti possono essere annotati sull'elemento dell'inviluppo SOAP.

  • Ogni messaggio SOAP deve avere un elemento Envelope root. È assolutamente obbligatorio che il messaggio SOAP abbia un elemento busta.
  • Ogni elemento della busta deve contenere almeno un elemento del corpo del sapone.
  • Se un elemento Envelope contiene un elemento header, non deve contenerne più di uno e deve apparire come il primo figlio dell'Envelope, prima dell'elemento body.
  • La busta cambia quando cambiano le versioni SOAP.
  • Un processore SOAP conforme alla v1.1 genera un errore alla ricezione di un messaggio contenente lo spazio dei nomi della busta v1.2.
  • Un processore SOAP conforme alla v1.2 genera un errore di mancata corrispondenza della versione se riceve un messaggio che non include lo spazio dei nomi della busta v1.2.

Di seguito è riportato un esempio di API SOAP della versione 1.2 dell'elemento busta SOAP.

int

Il messaggio di errore

Quando viene effettuata una richiesta a un servizio Web SOAP, la risposta restituita può essere di 2 forme che sono una risposta riuscita o una risposta di errore. Quando viene generato un esito positivo, la risposta dal server sarà sempre un messaggio SOAP. Ma se vengono generati errori SOAP, vengono restituiti come errori "HTTP 500".

Il messaggio di errore SOAP è costituito dai seguenti elementi.

  1. - Questo è il codice che designa il codice dell'errore. Il codice di errore può essere uno qualsiasi dei valori seguenti
    1. SOAP-ENV: VersionMismatch - Questo è quando viene rilevato uno spazio dei nomi non valido per l'elemento SOAP Envelope.
    2. SOAP-ENV: MustUnderstand - Un elemento figlio immediato dell'elemento Header, con l'attributo mustUnderstand impostato su "1", non è stato compreso.
    3. SOAP-ENV: Client - Il messaggio non era formato correttamente o conteneva informazioni errate.
    4. SOAP-ENV: Server - Si è verificato un problema con il server, quindi il messaggio non ha potuto procedere.
  2. - Questo è il messaggio di testo che fornisce una descrizione dettagliata dell'errore.
  3. (Facoltativo) - Questa è una stringa di testo che indica chi ha causato l'errore.
  4. (Facoltativo) : questo è l'elemento per i messaggi di errore specifici dell'applicazione. Quindi l'applicazione potrebbe avere un messaggio di errore specifico per diversi scenari di logica aziendale.

Esempio di messaggio di errore

Di seguito viene fornito un esempio di messaggio di errore. L'errore viene generato se lo scenario in cui il client tenta di utilizzare un metodo chiamato TutorialID nella classe GetTutorial.

Il seguente messaggio di errore viene generato nel caso in cui il metodo non esiste nella classe definita.

SOAP-ENV:ClientFailed to locate method (GetTutorialID) in class (GetTutorial)

Produzione:

Quando esegui il codice sopra, verrà visualizzato l'errore come "Impossibile individuare il metodo (GetTutorialID) nella classe (GetTutorial)"

Modello di comunicazione SOAP

Tutte le comunicazioni tramite SOAP avvengono tramite il protocollo HTTP. Prima di SOAP, molti servizi Web utilizzavano lo stile RPC (Remote Procedure Call) standard per la comunicazione. Questo era il tipo di comunicazione più semplice, ma aveva molti limiti.

Ora in questo tutorial sull'API SOAP, consideriamo il diagramma seguente per vedere come funziona questa comunicazione. In questo esempio, supponiamo che il server ospiti un servizio web che ha fornito 2 metodi come

  • GetEmployee - Questo otterrebbe tutti i dettagli del dipendente
  • SetEmployee - Questo imposterebbe il valore dei dettagli come il reparto dipendenti, stipendio, ecc.

Nella normale comunicazione in stile RPC, il client chiama semplicemente i metodi nella sua richiesta e invia i parametri richiesti al server, e il server invia quindi la risposta desiderata.

Il modello di comunicazione di cui sopra ha i seguenti gravi limiti

  1. Non indipendente dal linguaggio - Il server che ospita i metodi sarebbe in un particolare linguaggio di programmazione e normalmente le chiamate al server sarebbero solo in quel linguaggio di programmazione.
  2. Non il protocollo standard - Quando viene effettuata una chiamata alla procedura remota, la chiamata non viene eseguita tramite il protocollo standard. Questo era un problema poiché per lo più tutte le comunicazioni sul Web dovevano essere eseguite tramite il protocollo HTTP.
  3. Firewall : poiché le chiamate RPC non passano tramite il normale protocollo, è necessario che sul server siano aperte porte separate per consentire al client di comunicare con il server. Normalmente tutti i firewall bloccherebbero questo tipo di traffico e in genere era richiesta molta configurazione per garantire che questo tipo di comunicazione tra il client e il server funzionasse.

Per superare tutte le limitazioni sopra citate, SOAP utilizzerà quindi il modello di comunicazione riportato di seguito

  1. Il client formatterà le informazioni riguardanti la chiamata di procedura e qualsiasi argomento in un messaggio SOAP e lo invierà al server come parte di una richiesta HTTP. Questo processo di incapsulamento dei dati in un messaggio SOAP era noto come Marshalling.
  2. Il server quindi scartare il messaggio inviato dal client, vedere cosa il client ha richiesto e quindi inviare la risposta appropriata al client come messaggio SOAP. La pratica di scartare una richiesta inviata dal cliente è nota come Demarshalling.

Esempio pratico di SOAP

Ora in questo tutorial SoapUI, vediamo un pratico esempio SOAP,

Probabilmente uno dei modi migliori per vedere come vengono generati i messaggi SOAP è vedere effettivamente un servizio web in azione.

Questo argomento esaminerà l'utilizzo del framework Microsoft.Net per creare un servizio Web ASMX. Questo tipo di servizio Web supporta sia la versione SOAP 1.1 che la versione 1.2.

I servizi Web ASMX generano automaticamente il documento WSDL (Web Service Definition Language). Questo documento WSDL è richiesto dall'applicazione client chiamante in modo che l'applicazione sappia cosa è in grado di fare il servizio Web.

Nel nostro esempio, creeremo un semplice servizio web, che verrà utilizzato per restituire una stringa all'applicazione che chiama il servizio web.

Questo servizio web sarà ospitato in un'applicazione web Asp.Net. Invocheremo quindi il servizio Web e vedremo il risultato restituito dal servizio Web.

Visual Studio ci mostrerà anche quale messaggio SOAP viene passato tra il servizio Web e l'applicazione chiamante.

Il primo prerequisito per configurare la nostra applicazione del servizio Web che può essere eseguito seguendo i passaggi seguenti.

Assicurati di avere Visual Studio 2013 installato sul tuo sistema per questo esempio.

Passaggio 1) Il primo passaggio consiste nel creare un'applicazione Web ASP.Net vuota. Da Visual Studio 2013, fare clic sull'opzione di menu File-> Nuovo progetto.

Dopo aver fatto clic sull'opzione Nuovo progetto, Visual Studio ti fornirà un'altra finestra di dialogo per la scelta del tipo di progetto e per fornire i dettagli necessari del progetto. Questo viene spiegato nel passaggio successivo.

Passaggio 2) In questo passaggio,

  1. Assicurati di scegliere prima il modello Web C # dell'applicazione Web ASP.NET. Il progetto deve essere di questo tipo per creare un progetto di servizi SOAP. Scegliendo questa opzione, Visual Studio eseguirà i passaggi necessari per aggiungere i file richiesti che sono richiesti da qualsiasi applicazione basata sul Web.
  2. Dai un nome al tuo progetto che nel nostro caso è stato dato come webservice.asmx. Quindi assicurati di fornire una posizione in cui verranno archiviati i file di progetto.

Una volta terminato, vedrai il file di progetto creato in Esplora soluzioni in Visual Studio 2013.

Passaggio 3) In questo passaggio,

Aggiungeremo un file di servizio Web al nostro progetto

  1. Primo clic con il pulsante destro del mouse sul file di progetto come mostrato di seguito

  1. Dopo aver fatto clic con il pulsante destro del mouse sul file di progetto, hai la possibilità di scegliere l'opzione "Aggiungi-> Servizio Web (ASMX) per aggiungere un file di servizio Web. Fornisci semplicemente un nome di Servizio Tutorial per il file di nome del servizio Web.

Passaggio 4) Aggiungere il codice seguente al file asmx del servizio Tutorial.

Spiegazione del codice:

  1. Questa riga di codice fornisce un nome per il file del servizio Web. Questo è un passaggio importante perché consente all'applicazione client di chiamare il servizio Web tramite il nome del servizio Web.
  2. Normalmente un file di classe viene utilizzato per incapsulare la funzionalità di un servizio web. Quindi il file di classe avrà la definizione di tutti i metodi web che forniranno alcune funzionalità all'applicazione client.
  3. Qui [WebMethod] è noto come un attributo che descrive una funzione. Il passaggio successivo crea una funzione chiamata "Guru99WebService", ma con l'inclusione di questo passaggio di aggiunta di un attributo [WebMethod] si assicura che questo metodo possa essere richiamato da un'applicazione client. Se questo attributo non è a posto, il metodo non potrà mai essere chiamato da un'applicazione client.
  4. Qui stiamo definendo una funzione chiamata "Guru99WebService" che verrà utilizzata per restituire una stringa all'applicazione client chiamante. Questa funzione è un servizio Web che può essere richiamato da qualsiasi applicazione client.
  5. Stiamo utilizzando l'istruzione return per restituire la stringa "Questo è un servizio Web Guru99" all'applicazione client.

Se il codice viene eseguito correttamente, verrà visualizzato il seguente output quando si esegue il codice nel browser.

Produzione:

  • L'output mostra chiaramente che il nome del nostro servizio web è "Guru99 Web Service", che è il risultato dell'assegnazione di un nome al nostro servizio web.
  • Possiamo anche vedere che possiamo richiamare il servizio web. Se facciamo clic sul pulsante Invoke, otterremo la risposta seguente nel browser web.

L'output di cui sopra,

  • Mostra chiaramente che invocando il metodo web, viene restituita la stringa "Questo è un servizio Web Guru99".
  • Visual Studio consente inoltre di visualizzare la richiesta e la risposta del messaggio SOAP che viene generata quando viene chiamato il servizio Web sopra.

Di seguito viene mostrata la richiesta SOAP che viene generata quando viene chiamato il servizio web.

Spiegazione del codice:

  1. La prima parte del messaggio SOAP è l'elemento della busta che è ciò che è stato discusso nei capitoli precedenti. Questo è l'elemento incapsulante presente in ogni messaggio SOAP.
  2. Il corpo SOAP è l'elemento successivo e contiene i dettagli effettivi del messaggio SOAP.
  3. La terza parte è l'elemento che specifica che vogliamo chiamare il servizio che si chiama "Guru99WebService."

string

Spiegazione del codice:

  1. La prima parte del messaggio SOAP è l'elemento della busta che è ciò che è stato discusso nei capitoli precedenti. Questo è l'elemento incapsulante presente in ogni messaggio SOAP.
  2. Il corpo SOAP è l'elemento successivo e contiene i dettagli effettivi del messaggio SOAP.
  3. La parte interessante che vedrai ora è l'attributo "stringa". Ciò indica all'applicazione client che il servizio Web chiamato restituisce un oggetto di tipo stringa. Questo è molto utile perché se l'applicazione client che altrimenti non saprebbe cosa restituisce il servizio web.

Sommario

  • SOAP è un protocollo utilizzato per scambiare dati tra applicazioni costruite su linguaggi di programmazione differenti.
  • SOAP si basa sulla specifica XML e funziona con il protocollo HTTP. Questo lo rende perfetto per l'utilizzo all'interno delle applicazioni web.
  • Gli elementi costitutivi SOAP sono costituiti da un messaggio SOAP. Ogni messaggio SOAP è costituito da un elemento busta, un'intestazione e un elemento del corpo.
  • L'elemento busta è l'elemento obbligatorio nel messaggio SOAP e viene utilizzato per incapsulare tutti i dati nel messaggio SOAP.
  • L'elemento di intestazione può essere utilizzato per contenere informazioni come le informazioni di autenticazione o la definizione di tipi di dati complessi.
  • L'elemento body è l'elemento principale che contiene la definizione dei metodi web insieme a qualsiasi informazione sui parametri se richiesta.