Versioning in un ambiente SOA

rated by 0 users
This post has 7 Replies | 2 Followers

Top 25 Partecipanti
Post 4
Punteggio 80

Buonasera a tutti, sto costruendo anche io con molti sforzi il mio primo dominio di oggetti persistito tramite NHibernate ed esposto in SOA tramite WCF over https, il tutto pilotato da Castle.

Sto cercando di gestire il versioning delle risposte del mio servizio a chi lo consuma per evitare problemi di client non aggionati ecc... ecc...

Cercando un po' in rete non ho trovato nulla su come gestire attraverso AOP questa cosa.

Immagino convenga creare un servizio di front end che proxa le richieste dietro ai vari servizi.... giusto?

pensavo oppure...

E' possibile fare in modo che ad ogni richiesta fatta al servizio WCF il client mi passi la sua versione attraverso un aspetto e configurare il container di castle per risolvere ICustomerService con l'assembly giusto mettendo nel mapping xml <component id="1.0.0.0" ecc...

Bah, l'ho buttata li! :-)

Top 10 Partecipanti
Maschio
Post 244
Punteggio 3.403

Sostanzialmente Mauro ha fatto proprio questa dimostrazione ai Commumnity Day, ma lui ha una architettura veramente "tosta" che sta dietro a tutto :) la cui base è però avere un servizio di soli due metodi, che accetta una stringa e fare dietro tutte le logiche :) molto potente come concetto ma non facile da implementare per chi non ha familarita con WCF etc etc. 

TFS ad esempio versiona i servizi tipo

CustomerService_V1 e poi CustomerService_V2, in quseto modo manutieni però più codice, ma sei sicuro che i vecchi client possano usare il vecchio servizio.

Alessndro aveva anche fatto esperimenti di compatibilità con la messaggistica in WCF, ma non ha mai bloggato/pubblicato nulla, lo solleciterò a bloggare qualche cosa. 

LA chiave è essere meno accoppiato possibile, e per la soluzione di passare la versione in modo che poi venga risolvo ICustomerService con l'assembly giusto, forse è più semplice fare due endpoint distinti come detto prima.

 

Alk.

  • | Punteggio Post: 20
Top 25 Partecipanti
Post 4
Punteggio 80

Ho visto come l'ha gestita Mauro... direi che non è proprio una cosa alla mia portata :-)

Immaginavo che lavorare con più endpoint fosse la via più rapida, adesso mi studio un po' anche TFS comunque.

Grazie Alk!!

  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
Post 244
Punteggio 3.403

Mauro ha adottato un approccio veramente SOA, dove usa WCF per il suo vero scopo, il trasporto e lasciando tutto il resto alla sua applicazione :) è decisamente una srtuttura da usare per progetti complessi, a plugin etc etc.

Alk.

  • | Punteggio Post: 20
Top 25 Partecipanti
Post 4
Punteggio 80

Se creo un servizio IUpdateService che previa verifica della versione del client, distribuisce gli updates tramite WCF dici che è una cattiva idea?

Alla fine non ho necessità di lavorare con client di versioni differenti come Mauro, mi basterebbe avere in produzione un endpoint con i miei servizi e sapere che tutti i client che non sono di una certa versione si "adeguino".

Dici che è una "cagata pazzesca" <cit.>? :-)

 

  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
Post 244
Punteggio 3.403

Guarda, se distribuisci con clickonce puoi anche forzare gli update, quindi stai abbastanza tranquillo.

Altrmenti ti metti su un tuometodo con il quale il client interroga un servizio e come dici tu si scarica gl update e buonanotte. Se puoi permetterti di dire che i client vecchi non sono supportati non hai problemi.

alk.

  • | Punteggio Post: 20
Top 25 Partecipanti
Post 4
Punteggio 80

Grazie alk, sempre molto chiaro e risolutivo!

Auguri di buone feste!

  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
Post 244
Punteggio 3.403

Con imperdonabile ritardo :) ma auguri anche a te e a tutti i lettori di Guisa.

alk.

  • | Punteggio Post: 5
Pagina 1 di 1 (8 elementi) | RSS
Powered by Community Server (Commercial Edition), by Telligent Systems