Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Pipes!!

Îåêßíçóå áðü ôï ìÝëïò afnman. Τελευταία δημοσίευση από το μέλος Dimitris Papadimitriou στις 07-09-2009, 23:36. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  07-09-2009, 14:47 53512

    Pipes!!

    Καλησπέρα!

    Υπάρχει τροπος να στειλω ένα ολόκληρο Object απο μια εφαρμογή σε μια άλλη μεσω Named Pipes (NamedPipeServerStream/NamedPipeClientStream) ??

    Εννοώ εαν υπάρχει κάποιος  πχ Writer  που να δεχεται σαν όρισμα τυπου class Object και ενας αντιστοιχος Reader βέβαια

    Ευχαριστώ

  •  07-09-2009, 16:12 53527 σε απάντηση της 53512

    Απ: Pipes!!

    Ο καλύτερος τρόπος για να κάνεις κάτι τέτοιο είναι να χρησιμοποιήσεις WCF και το NetNamedPipeBinding. Η λογική δεν ακολουθεί ακριβώς το Reader/Writer pattern αλλά περισσότερο τη λογική RPC (Remote Procedure Call) ή την ανταλλαγή messages, όπως δηλαδή γίνεται γενικά με το WCF. Πιστεύω ότι είναι ακριβώς αυτό που θέλεις.

    Για να το κάνεις αυτό θα δημιουργήσεις ένα WCF Service (στο VS New Project>WCF Service Library). Το VS θα το δημιουργήσει by default με basicHttpBinding. Μπορείς να το αλλάξεις σε netNamedPipeBinding από το app.config. Στη συνέχεια θα κάνεις ένα δεύτερο project που θα χρησιμοποιήσει το service σου. Στο δεύτερο αυτό project κάνε δεξί κλικ στον solution explorer και επέλεξε Add Service Reference.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  07-09-2009, 23:24 53543 σε απάντηση της 53527

    Απ: Pipes!!

    Δημήτρη, αυτό που ζητάει ο afnman είναι μάλλον διαφορετικό από αυτά που κάνει το WCF. Το WCF είναι καλό αν θέλεις να υλοποιήσεις μηχανισμούς RPC και messaging, έχει όμως πολύ μεγάλο overhead σε κώδικα και performance αν το μόνο που θέλεις είναι απλά να στείλεις ένα blob από τη μία άκρη ενός stream στην άλλη. Τέλος, είναι εντελώς ακατάλληλο όταν θέλεις να στείλεις μία συνεχή ροή δεδομένων (ή αλλιώς ένα stream) από ένα process σε ένα άλλο. Τα Named Pipes είναι πλησιέστερα στα sockets παρά στα Web Services και το RPC.

    Afnman, ένα NamedPipeServerStream ή ένα NamedPipeClientStream κληρονομούν στο τέλος από το stream και μπορούν να χρησιμοποιηθούν ως απλά streams. Αυτό σημαίνει ότι μπορείς άνετα να χρησιμοποιήσεις ένα StreamWriter για να γράψεις σε ένα NamedPipeServerStream και ένα StreamReader για να διαβάσεις από ένα NamedPipeClientStream. Παραδείγματα θα βρεις τόσο στο documentation της κάθε κλάσης, όσο και στο How to: Use Named Pipes to Communicate Between Processes over a Network


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  07-09-2009, 23:36 53545 σε απάντηση της 53543

    Απ: Pipes!!

    Αν κατάλαβα καλά από την ερώτηση (μεταφορά ολόκληρου object πάνω από pipes) τότε επιμένω ότι wcf και το σχετικό binding είναι η καλύτερη επιλογή. Η ερώτηση δεν λέει πουθενά για συνεχή ροή δεδομένων. Επίσης δεν έχει καθόλου overhead σε κώδικα, ειδικά αν χρησιμοποιήσει κανείς ChannelFactory (αν θέλεις περισσότερα γι αυτό πες το), αλλά και με τον κλασικό τρόπο δημιουργίας proxy (add service reference στο VS δηλαδή, όπως λέω παραπάνω) δεν είναι και τόσο τραγικό. Τέλος κερδίσεις και σε ευελιξία μια που αν αποφασίσεις ότι δεν σου φτάνουν τα pipes αλλά θέλεις τελικά η μια εφαρμογή να τρέχει σε άλλο pc απλά αλλάζεις το configuration σε basic ή ws http binding χωρίς να πειράξεις καθόλου τον κώδικα.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems