2010-04-06 23 views
12

Immaginate un'applicazione CRUD più complessa che abbia un'architettura a tre livelli e comunichi tramite i servizi web. Il client avvia una conversazione sul server e fa alcuni wizard come roba. Per elaborare la procedura guidata, il client ha bisogno del feedback fornito dal server.Webservices stateful vs. Stateless


Abbiamo iniziato una discussione sui webservice statici o stateless per questo approccio. Ho fatto delle ricerche combinate con la mia esperienza personale, che mi indirizza alla domanda menzionata in seguito.

webservices apolidi aventi le seguenti proprietà (nel nostro caso):

+ high scalability 
+ high availability 
+ high speed 
+ rapid testing 
- bloated contract 
- implementing more logic on server-side 

Ma possiamo attraversare i primi due punti, la nostra applicazione non necessita di elevata scalabilità e disponibilità.

Quindi arriviamo al servizio web stateful. Ho letto un sacco di blog e messaggi del forum e il punto più inventato l'attuazione di un webservice stateful era:

+ simplifies contract (protocol) 
- bad testing 
- runs counter to the basic architecture of http 

Ma non lo fa quasi tutte le applicazioni Web avere questi punti negativi? Le applicazioni Web utilizzano i cookie, le stringhe di query, gli ID di sessione e tutto il resto per evitare l'apolidia di http.

Quindi, perché è così male per i servizi web?

+1

Abbastanza vicino a un dupe: http://stackoverflow.com/questions/988819/stateful-webservice – gregmac

+3

Mettere lo stato in un luogo che può facilmente gestire lo stato: il database –

risposta

9

Perché mantenere lo stato in un servizio Web è difficile e se non si è estremamente attenti e/o esperti prima o poi si potrebbero riscontrare alcuni bug molto difficili da trovare.

+0

Bene, dipende da cosa è la piattaforma. Molte volte il contenitore si prenderà cura delle sessioni per te. –

+1

Perché non utilizzare semplicemente un contenitore progettato per questo scopo come un RDMS. –

+0

Non sono sicuro di aver capito. Se metti roba in RDMS significa fondamentalmente rotolare le tue sessioni che probabilmente andranno peggio. Non sembra che abbia bisogno di informazioni persistenti nella sessione, quindi perché metterlo lì? –

1

Ho avuto una ragionevole fortuna con i servizi web stateful. Si sentono leggermente sporchi perché la cosa della sessione cookie hole su HTTP è quella; ma d'altra parte erano SAPONI, quindi sarebbe stato stupido essere troppo sconvolti per la bellezza a quel punto.

Una cosa da tenere a mente è l'interoperabilità: se si esegue un servizio Web di stato i client dovranno supportare la stessa idea di stato che si fa (di solito i cookie). Ma di nuovo - ha funzionato bene per me.

P.S. Presumo che tu sia in un contenitore che si prenderà cura di tenere traccia delle sessioni per te.

2

Lo stato è dove nasconde anche la maggior parte degli errori.