Δεν θα συμφωνήσω. Η μεταφορά base64 αντί για binary έχει και το κόστος τις μεταφοράς αλλά και το κόστος της μετατροπής. Αλλά και τα streams απαιτούν προσοχή για να μην βρεθείς να κρατάς 2 ή 3 αντίγραφα του ίδιου αρχείου στη μνήμη.
Γενικά, το μόνο που χρειάζεται είναι από μία σελίδα aspx να δημιουργείς δυναμικά το PDF (ή αν το διαβάζεις αν ήδη υπάρχει) και να επιστρέψεις το περιεχόμενο του αρχείου βάζοντας τα σωστά content-headers. Ένα παράδειγμα:
response.ContentType = "application/octet-stream";
response.AppendHeader("Content-Disposition", "attachment; filename=" + filename); response.BinaryWrite(pdfBytes);
response.End();
Με τον τρόπο αυτό θα πάρεις το αρχείο σου ως binary χωρίς παρατράγουδα.
Αλλά ακόμα και αν θέλεις να παραμείνεις σε web service, δεν υπάρχει να πάς μέσω Βερολίνου με streams. Η Convert.FromBase64String αυτή τη δουλειά κάνει.
Αυτό που με παραξενεύει όμως είναι ότι παίρνεις Base64 αντί για byte array. Αν το web method έχει οριστεί να επιστρέφει byte array, έπρεπε να διαβάζεις byte array ακόμα και να το ενδιάμεσο είναι Base64. Σε τί είναι δημιουργημένο το web service? Ποιό είναι το signature της μεθόδου? Πως το καλείς? Ποιός είναι ο τύπος που σου επιστρέφει το proxy? Αν έδινες και λίγο wsdl ίσως να ξεκαθάριζε το πράγμα.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos