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

 

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

WCF service client with proxy

Îåêßíçóå áðü ôï ìÝëïò RedHat. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 02-12-2008, 11:22. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  01-12-2008, 16:56 46608

    WCF service client with proxy

    Ύστερα από το devday της microsoft με την παρουσίαση του WCF έχω ξεκινήσει και φτιάχνω ένα WCF service.

    Θέλω να δημιουργήσω έναν client που να επικοινωνει με το service αλλά χωρίς να χρειάζεται να κάνω service reference .Νομίζω πως αυτό γίνεται με την χρήση proxy ή κάνω λάθος? Νομίζω παρουσιάστηκε στην microsoft από τους συναδέλφους του forum αλλά δεν μπορώ να θυμηθώ πως το κάνω ακριβώς.

    Αν θα μπορούσε κάποιος λοιπόν να εξηγήσει τα βήματα για τον client χωρίς να γίνει service refernce ώστε όταν αλλαζω τον κώδικα του service να μην επηρεάζεται η client εφαρμογή και χρειάζεται πάλι να κάνω refernce.

    ευχαριστώ

    Peter Bournakas
  •  01-12-2008, 22:55 46621 σε απάντηση της 46608

    Απ: WCF service client with proxy

    Κάπου πρέπει να μπερδεύεις τί είναι service reference και τί είναι proxy. To service reference ΕΙΝΑΙ proxy, ή μάλλον όταν προσθέτεις ένα service reference δημιουργείται αυτόματα ένα proxy μαζί με τα κατάλληλα configuration settings. Όπως και να φτιάξεις το proxy, αν αλλάξει το WCF Service θα πρέπει να αλλάξει και αυτό. Συνεπώς δεν χάνεις τίποτε δημιουργώντας ένα service reference.

    Υποψιάζομαι ότι αυτό που σε απασχολεί είναι το versioning, τί συμβαίνει δηλαδή όταν αλλάζει το signature ενός service ή μίας μεθόδου του. Δεν αποφεύγεις την αλλαγή του client αν θέλεις ο client σου να εκμεταλλευτεί το νέο signature - ακόμα και αν έφτιαχνες τα requests με ... το χέρι. Πιο ενδιαφέρον είναι τί γίνεται αν δεν θέλεις ο παλιός client να χαλάσει αν αλλάξεις ένα service. Η μορφή των δεδομένων που ανταλλάσσονται μεταξύ client/server ορίζεται από μία κλάση με το attribute DataContract. Αν προσθέσεις ή αφαιρέσεις ένα πεδίο από το DataContract ενός WCF Service, το proxy στην πλευρά του client θα προσπαθήσει να αντιμετωπίσει τη διαφορά. Αν έχει προστεθεί ένα νέο πεδίο, απλά θα το αγνοήσει. Αν έχει αφαιρεθεί ένα πεδίο, θα χρησιμοποιήσει την default τιμή του. Μπορείς επίσης να εκμεταλλευτείς το OnDeserializing event στον client για να αντικαταστήσεις τις τιμές που λείπουν με άλλες.

    Στο τέλος, το versioning γίνεται ευκολότερο χρησιμοποιώντας ένα service reference. Αν αυτός είναι ο λόγος για τον οποίο θέλεις να το αποφύγεις, νομίζω ότι θα πρέπει να το ξανασκεφτείς.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  01-12-2008, 23:20 46622 σε απάντηση της 46621

    Απ: WCF service client with proxy

    Συνημμένα: HelloWorld.zip
    Αυτό που ρωτάει ο φίλος μας είναι η χρήση του channel factory για τη δημιουργία καναλιών αντί για τη χρήση proxy.
    Αυτό που έδειξα στο devday είναι το εξής:
                var channelFactory = new System.ServiceModel.ChannelFactory<HelloWorld.IService1>("BasicHttpBinding_IService1");
                var channel = channelFactory.CreateChannel();
    Δες επίσης το επισυναπτόμενο project.

    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  02-12-2008, 00:18 46629 σε απάντηση της 46622

    Απ: WCF service client with proxy

    Καλησπέρα και ευχαριστώ για τις γρήγορες απαντήσεις.
    Η αλήθεια είναι ότι όντως επειδή με WCF και γενικότερα web services δεν έχω ασχοληθεί ίσως να μην έχω ξεκάθαρα κάποια πράγματα στο μυαλό μου.
    Αυτό που λέει ο αγαπητός Δημήτρης είναι όντως αυτό πουναναζητώ και είχες δείξει Δημήτρη στο devday. Θα κοιτάξω το συνημμένο σου.

    Ευχαριστώ

    Peter Bournakas
  •  02-12-2008, 10:52 46635 σε απάντηση της 46629

    Απ: WCF service client with proxy

    υπάρχει κάποιο πλεονέκτημα της χρήσης channel factory αντί για proxy?

    Peter Bournakas
  •  02-12-2008, 11:02 46636 σε απάντηση της 46635

    Απ: WCF service client with proxy

    Η ακριβής ερώτηση είναι "channel factory αντί auto generated proxy".
    Δεν υπάρχει κάποια διαφορά σε performance. Απλά αν έχεις το έλεγχο client και server εγώ προτιμώ το factory γιατί έτσι δεν χρειάζεται να κάνω update το service reference όταν γίνονται αλλαγές και επίσης μπορώ να έχω κοινό κώδικα για τα DTO (data transfer objects) μου στον client και τον server.

    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  02-12-2008, 11:22 46639 σε απάντηση της 46636

    Απ: WCF service client with proxy

    Θα έλεγα ότι απαιτείται να έχεις κοινό κώδικα, τουλάχιστον τον ορισμό του IService1. Αυτό παίζει αν έχεις στενό έλεγχο και στον client και στο server, ή μάλλον αν τους αναπτύσσεις παράλληλα και κάνεις και το deployment ταυτόχρονα. Σε αυτή την περίπτωση δεν σε ενδιαφέρει το versioning. Επίσης, κάνει γρηγορότερο το development καθώς δεν χρειάζεται να κάνεις regenerate τον proxy, ή μάλλον, δεν χρειάζεται να διορθώνεις bugs όταν ΞΕΧΝΑΣ να κάνεις regenerate τον proxy.

    Τέτοιες περιπτώσεις συναντάς όταν χρησιμοποιείς τα WCF Services σαν ένα μηχανισμό RPC μεταξύ δύο δικών σου εφαρμογών, οπότε δεν σε ενδιαφέρει η συνεργασία με άλλους clients ή ακόμα και με παλαιότερες εκδόσεις του ίδιου client.

    Αν όμως δεν μπορείς να κάνεις ταυτόχρονα τα deployments, ή αν υπάρχουν διάφοροι clients όπως άλλες εφαρμογές, ή κανένα BizTalk, αν θέλεις να εξακολουθήσουν να δουλεύουν οι παλιοί clients (π.χ. όσο διαρκεί το deployment), αν άλλη ομάδα φτιάχνει τον client, τότε πρέπει να σκεφτείς τί θα κάνεις με το versioning. Σε αυτές τις περιπτώσεις δεν μπορείς να πετάξεις τα παλιά IService1 και να παίξεις με καινούρια. Θα πρέπει να συνεχίσουν να δουλεύουν και οι clients που ήξεραν το IService1 v1 και οι νέοι με το IService v2.

    Τέτοιες περιπτώσεις συναντάς όταν χρησιμοποιείς τα WCF Services ως ... web services. Σε αυτή την περίπτωση πραγματικά δεν ξέρεις ποιός σε καλεί. Μπορεί να είναι κάποιος client που έφτιαξες εσύ, μπορεί να είναι μία άλλη εφαρμογή, κάποιο integration service, κάποιο workflow. Το κόστος της αλλαγής όλων των client είναι μεγάλο οπότε πρέπει να χειριστείς κάπως το θέμα του versioning.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems