Μα υπάρχει λύση! Θα βρεις ένα sample για συμπίεση με GZip στο WCF SDK, αν και δεν υποστηρίζει κάποιο standard. Ο Pablo Cibraro έχει επίσης υλοποιήσει το WS-Compression για WCF. Ψάχνοντας στο Google θα βρεις και υλοποιήσεις του WS-Compression για WSE3. Αν δεν θέλεις να χρησιμοποιήσεις το WS-Compression, δοκίμασες να ενεργοποιήσεις το IIS compression, το οποίο συμπιέζει τα δεδομένα σε επίπεδο HTTP.
Τέλος, θα πρέπει να λάβεις σοβαρά υπόψη ότι τα datasets και τα datatables δεν φτιάχτηκαν ποτέ για να στέλνονται μέσω web services. Ένα web service το οποίο στέλνει datasets μπορεί να χρησιμοποιηθεί μόνο από .NET clients, καταργώντας έτσι το βασικό πλεονέκτημα των web services, το interoperability. Επίσης, είναι κακή σχεδίαση για την εφαρμογή, γιατί προϋποθέτει ότι οι clients καταλαβαίνουν πως δουλεύει ο server εσωτερικά - πως δημιουργεί πίνακες και τί πεδία χρησιμοποιεί, τί σημαίνουν τα πεδία. Αν κάνεις κάποια αλλαγή στο dataset, οι clients θα πάψουν να δουλεύουν.
Τα web services είναι φτιαγμένα βασικά για ανταλλαγή μηνυμάτων, τα οποία έχουν νόημα άσχετα από την υλοποίηση του client ή του server. Ο client και ο server διαβάζουν από το μήνυμα μόνο τα πεδία που τους ενδιαφέρουν. Αν θέλεις να εκτελέσεις μία μεταφορά χρημάτων από ένα λογαριασμό σε άλλο, θα στείλεις στο κατάλληλο web service ένα μήνυμα που θα ζητάει τη μεταφορά και θα αναφέρει τους εμπλεκόμενους λογαριασμούς. Αν στο μέλλον θέλεις να προσθέσεις και άλλα στοιχεία (π.χ. ενδιάμεσες τράπεζες) το προσθέτεις ως optional πεδίο και οι παλιοί clients θα συνεχίσουν να δουλεύουν.
Το WCF και το ASMX μπορεί να σου δίνουν την εντύπωση ότι δεν υπάρχει ανταλλαγή μηνυμάτων αλλά κλήση μεθόδων. Αυτό το κάνουν για να διευκολύνουν τον προγραμματισμό, μπορεί όμως να σε κάνουν να φτιάξεις μία εύθραυστη εφαρμογη η οποία δεν θα μπορεί να επικοινωνήσει με άλλες.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos