Θα έλεγα ότι απαιτείται να έχεις κοινό κώδικα, τουλάχιστον τον ορισμό του IService1. Αυτό παίζει αν έχεις στενό έλεγχο και στον client και στο server, ή μάλλον αν τους αναπτύσσεις παράλληλα και κάνεις και το deployment ταυτόχρονα. Σε αυτή την περίπτωση δεν σε ενδιαφέρει το versioning. Επίσης, κάνει γρηγορότερο το development καθώς δεν χρειάζεται να κάνεις regenerate τον proxy, ή μάλλον, δεν χρειάζεται να διορθώνεις bugs όταν ΞΕΧΝΑΣ να κάνεις regenerate τον proxy.
Τέτοιες περιπτώσεις συναντάς όταν χρησιμοποιείς τα WCF Services σαν ένα μηχανισμό RPC μεταξύ δύο δικών σου εφαρμογών, οπότε δεν σε ενδιαφέρει η συνεργασία με άλλους clients ή ακόμα και με παλαιότερες εκδόσεις του ίδιου client.
Αν όμως δεν μπορείς να κάνεις ταυτόχρονα τα deployments, ή αν υπάρχουν διάφοροι clients όπως άλλες εφαρμογές, ή κανένα BizTalk, αν θέλεις να εξακολουθήσουν να δουλεύουν οι παλιοί clients (π.χ. όσο διαρκεί το deployment), αν άλλη ομάδα φτιάχνει τον client, τότε πρέπει να σκεφτείς τί θα κάνεις με το versioning. Σε αυτές τις περιπτώσεις δεν μπορείς να πετάξεις τα παλιά IService1 και να παίξεις με καινούρια. Θα πρέπει να συνεχίσουν να δουλεύουν και οι clients που ήξεραν το IService1 v1 και οι νέοι με το IService v2.
Τέτοιες περιπτώσεις συναντάς όταν χρησιμοποιείς τα WCF Services ως ... web services. Σε αυτή την περίπτωση πραγματικά δεν ξέρεις ποιός σε καλεί. Μπορεί να είναι κάποιος client που έφτιαξες εσύ, μπορεί να είναι μία άλλη εφαρμογή, κάποιο integration service, κάποιο workflow. Το κόστος της αλλαγής όλων των client είναι μεγάλο οπότε πρέπει να χειριστείς κάπως το θέμα του versioning.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos