Η επικοινωνία με τα web services παρουσιάζει πολλές φορές προβλήματα λόγου του όγκου των δεδομένων που ανταλλάσσονται. Όταν ένας client ζητά μια μεγάλη ποσότητα δεδομένων, σε πολλές περιπτώσεις η κοινή πρακτική είναι να επιστρέψουμε ένα dataset με τα δεδομένα που ζήτησε. Το dataset όμως γίνεται serialized σε xml και τα προβλήματα αρχίζουν, καθώς ο όγκος της xml που περιγράφει το dataset είναι πολλές φορές μεγάλος.
Υπάρχουν τεχνικές συμπίεσης των δεδομένων σε επίπεδο web method. Ο client ζητά τα δεδομένα, τα παίρνουμε από τη βάση, τα συμπιέζουμε και επιστρέφουμε πίσω ένα array από bytes. Αυτό όμως απαιτεί αλλαγές στον κώδικα για κάθε web method, εξαφανίζει ουσιαστικά τον τύπο των δεδομένων (επιστρέφει πλέον bytes αντί του dataset ή typed dataset) (μιλάμε για .net 1.1), ενώ απαιτεί αλλαγές και στον κώδικα του client προκειμένου να αποσυμπιέσει τα bytes που παραλαμβάνει.
Ο DaberElay στο άρθρο του "Adding a zip filter to web services", προσεγγίζει το θέμα από μια άλλη οπτική γωνία, χρησιμοποιώντας προς όφελός του τη δυνατότητα των WSE να περνάνε τα soap messages από φίλτρα πριν φτάσουν στον τελικό προορισμό τους.
Η τεχνική που περιγράφει δημιουργεί στην ουσία ένα φίλτρο συμπίεσης και ένα αποσυμπίεσης, και ορίζει τη χρήση τους με μια απλή δήλωση μέσα στο configuration αρχεία του server και του client. Η ιδέα είναι πολύ καλή, ο κώδικας λίγος, ενώ αν αποφασίσετε να το χρησιμοποιήσετε θα κατανοήσετε καλύτερα πολλά θέματα γύρω από την επικοινωνία των web services και τα WSE.
Αν έχετε απορίες ή προβλήματα στην υλοποίηση... εδώ είμαστε...
http://www.codeproject.com/cs/webservices/WebServiceZipFilter.asp
Χρήστος Γεωργακόπουλος