Το ότι η συσκευή θα βρίσκεται στην εμβέλεια του ασύρματου δικτύου δεν σημαίνει σε καμμία περίπτωση ότι θα υπάρχει και σύνδεση. Οι ασύρματες συνδέσεις είναι εκ φύσεως αναξιόπιστες και επηρεάζονται πολύ από παρεμβολές και φυσικά εμπόδια όπως ένας τοίχος. Αν η εφαρμογή σου συνδέεται σαν μία απλή desktop εφαρμογή θα αντιμετωπίσεις οπωσδήποτε θέματα χαμένων συνδέσεων και timeouts όταν θα υπάρχουν προβλήματα στη σύνδεση. Το λιγότερο που πρέπει να κάνεις είναι να βάλεις exception handlers οι οποίοι θα προσπαθούν να εκτελέσουν ξανά τα queries κάθε φορά που παρουσιάζεται πρόβλημα λόγω σύνδεσης.
Το πρόβλημα είναι ότι όταν συνδυάσεις τα retries που κάνει το ασύρματο δίκτυο και η εφαρμογή σου, ο χρόνος εκτέλεσης ενός query μπορεί να αυξηθεί σημαντικά, οδηγώντας σε timeouts. Θα πρέπει να μειώσεις όσο γίνεται τη διάρκεια κάθε σύνδεσης, φροντίζοντας τα queries και τα αποτελέσματα τους να είναι μικρά. Και πάλι όμως υπάρχει σημαντική πιθανότητα κάποια queries να αντιμετωπίσουν πολλά retries. Ο μόνος τρόπος να δεις πόσο θα σε επηρεάσουν αυτά τα πράγματα είναι να δοκιμάσεις την εφαρμογή σε πραγματικό περιβάλλον. Μπορεί να διαπιστώσεις ότι δεν υπάρχει σημαντικό πρόβλημα (π.χ. αν χρησιμοποιείς την εφαρμογή σε ένα καφέ, δεν υπάρχουν πολλά εμπόδια), ή ότι υπάρχει σημαντικό πρόβλημα (σε περιβάλλον αποθήκης με πολλά μεταλλικά ράφια, ή μέσα σε κτίριο με τοίχους).
Μία καλύτερη λύση είναι να αλλάξεις την αρχιτεκτονική της εφαρμογής ώστε να κάνει cache σε μία τοπική βάση τα δεδομένα που χρειάζεται και να καλεί τον κεντρικό SQL Server μόνο όταν θέλει να στείλει ένα batch αλλαγών. Δες το Mobile Client Software Factory το οποίο βοηθάει να υλοποιήσει ακριβώς αυτό το είδος εφαρμογής.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos