Το "δεν ξέρω γιατί" δεν σημαίνει ότι δεν παίζει το UploadFile. Επίσης δεν σημαίνει ότι θα δουλέψει το FTP, καθώς το ίδιο πρόβλημα μπορεί να επηρεάζει και το HTTP και το FTP. Αν π.χ. παρεμβάλλεται κάποιο proxy, καμμία προσπάθεια upload δεν θα δουλέψει αν δεν βάλεις το σωστό proxy. Τί exception σου γύρισε? Host not found, timeout, authentication, κάτι άλλο?
Έτσι κι αλλιώς, οι εντολές στο "My" namespace υπάρχουν απλά και μόνο για να κάνεις δουλίτσες στα γρήγορα. Είναι σχεδόν το ίδιο εύκολο (και πολύ καλύτερα διαχειρίσιμο) να χρησιμοποιήσεις τις κατάλληλες κλάσεις όπως π.χ. την
WebClient για να στείλεις αρχεία ή strings, να ορίσεις passwords και proxies, και να δουλέψεις είτε με HTTP είτε με FTP. Μπορείς να στείλεις χύμα string με την
UploadString, ολόκληρα αρχεία με την
UploadFile ή binary data με την
UploadData.
Τέλος, όταν υπάρχει proxy στο δίκτυο του πελάτη πρέπει να βάλεις τις κατάλληλες ρυθμίσεις αλλιώς δεν θα παίξει ούτε το HTTP ούτε το FTP. Αυτό γίνεται από το app.config της εφαρμογής, βάζοντας τις κατάλληλες τιμές στο
defaultproxy element, είτε με κώδικα με το
WebClient.Proxy property. Μπορείς π.χ. να προσθέσεις ένα Proxy setting στην εφαρμογή σου το οποίο θα μπορεί να θέσει ο χρήστης και το οποίο θα χρησιμοποιείς εσύ μετά κατά τη σύνδεση.
Υ.Γ. Μιάς και ο Σωτήρης πρότεινε το email, μπορείς να χρησιμοποιήσεις το
SmtpClient για να στείλεις email. Και πάλι, κάπου θα πρέπει να βάλεις τις ρυθμίσεις (server, address κλπ), είτε στο app.config, στο
mailSettings element, ή με user settings και κώδικα.
Ακόμα καλύτερα, φτιάχνεις μία κλάση, π.χ. BugReporter η οποία χρησιμοποιεί και τους δύο τρόπους, upload και email, για να στείλει το diagnostic log.
Υ.Υ.Γ.

Και μπράβο που σκέφτηκες 1) να γράφεις κάπου τα diagnostics, 2) να διευκολύνεις το χρήστη να σου τα στείλει. Έχω δει αμέτρητες γραμμές κώδικα από "επαγγελματίες" οι οποίοι καταπίνουν τα errors για να μην τα πάρει χαμπάρι ο πελάτης.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos