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

 

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

Web Service - Customization της proxy class που δημιουργεί το VS

Îåêßíçóå áðü ôï ìÝëïò Dimitris Papadimitriou. Τελευταία δημοσίευση από το μέλος Dimitris Papadimitriou στις 12-03-2007, 13:25. Υπάρχουν 20 απαντήσεις.
Σελίδα 1 από 2 (21 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  14-09-2006, 13:24 16737

    Web Service - Customization της proxy class που δημιουργεί το VS

    Έχω να κάνω μια περίεργη ίσως ερώτηση. Έστω ότι έχω δημιουργήσει ένα web service. Έχει μια συνάρτηση που επιστρέφει μια custom κλάση. π.χ.

    <WebMethod()>_
    public function GetClient() as Client
       return .....
    end function

    Η κλάση client περιέχεται σε ένα project A.

    Από ένα άλλο project B δημιουργώ reference στο web service. Ως αποτέλεσμα, το VS δημιουργεί μια proxy class, τόσο για το web service όσο και για την custom class που λέγεται client. Προφανώς η class αυτή φέρει το ίδιο όνομα, properties, methods κλπ. με την αρχική client class, αλλά δεν είναι ίδιες.

    Η ερώτηση: Εφόσον το project B έχει reference στο project A, οπότε και στην αυθεντική κλάση client, μπορώ με κάποιο τρόπο να "πω" στο vs να μην δημιουργήσει proxy class για την κλάση client;


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  14-09-2006, 14:49 16741 σε απάντηση της 16737

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

    Αυτό που θέλεις λέγεται type sharing και στο 1.1 δεν έχω βρει κανένα τρόπο να το κάνω. Αν παίζεις με 2.0 ψάξε για "type sharing web services" or something...

    Αααα, θεωρητικά μπορείς να πειράξεις το generated code με το χέρι και να το κάνεις, αλλά σε κάθε refresh των web service references θα χάνεις τ' αυγά και τα πασχάλια...
    Χρήστος Γεωργακόπουλος
  •  14-09-2006, 15:02 16743 σε απάντηση της 16737

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

    Υποθέτω ότι αυτό που θες είναι να χρησιμοποιήσεις στον client το πραγματικό object και όχι το "shell" που περιέχει το proxy class ε;

    Βασικά, δεν μπορείς να του πεις να μην το δημιουργήσει. Αυτό που μπορείς να κάνεις ως εναλλακτική λύση είναι να βάλεις το web method να μην επιστρέφει το object αλλά string. Το string αυτό θα είναι ένα serialized object σε XML μορφή.

    Την όλη διαδικασία μπορείς να την υλοποιήσεις με δύο τρόπους. Ο πρώτος είναι να βάλεις δύο μεθόδους FromXML, ToXML σε κάθε κλάση που πρόκειται να αποτελεί return value και κατόπιν να αλλάξεις το signature του κάθε web method ώστε να επιστρέφει string.

    O δεύτερος τρόπος είναι να μαρκάρεις την κλάση ως serializable και κατόπιν να μπεις μέσα στον κώδικα του proxy object (Reference.vb ή Reference.cs). Εκεί θα βάλεις ένα reference στην "αυθεντική" κλάση και θα διαγράψεις χειροκίνητα το stub (είναι ένα partial class). Είσαι έτοιμος! Απλά μην ξεχάσεις να ξανακάνεις τη διαδικασία αν τύχει να κάνεις refresh το web service.

    [Να συμπληρώσω επίσης ότι] φυσικά και μπορείς να κάνεις implement το ISerializable ώστε να κάνεις όσο customized θέλεις τη διαδικασία του serialization/desirialization


    Vir prudens non contra ventum mingit
  •  14-09-2006, 15:13 16746 σε απάντηση της 16743

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

    Ουπς! Αυτό που περιέγραψα ήταν framework 1.1 τεχνική. Δεν είχα πάρει χαμπάρι ότι το (ψιλό)έφτιαξαν στο 2.0: http://quickstarts.asp.net/QuickStartv20/webservices/doc/TypeSharing.aspx

     


    Vir prudens non contra ventum mingit
  •  14-09-2006, 16:34 16749 σε απάντηση της 16746

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

    Επιτέλους! Στον ουρανό το έψαχνα....!!!
    Ευχαριστώ πολύ ρε παιδιά! ...κάτι τέτοια κάνετε και... να τώρα με πήρανε τα ζουμιά! Crying
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  18-09-2006, 18:41 16863 σε απάντηση της 16749

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

    Επανέρχομαι... Αυτή η λύση είναι ακόμα καλύτερη! http://blogs.msdn.com/rjacobs/archive/2006/09/03/738142.aspx

    Πιο κομψή και χωρίς ματσακονιές στα generated αρχεία.


    Vir prudens non contra ventum mingit
  •  18-09-2006, 18:47 16865 σε απάντηση της 16863

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

     KelMan wrote:

    Επανέρχομαι... Αυτή η λύση είναι ακόμα καλύτερη! http://blogs.msdn.com/rjacobs/archive/2006/09/03/738142.aspx

    Πιο κομψή και χωρίς ματσακονιές στα generated αρχεία.

    Extra-Super ενδιαφέρον!!! Πολύ έξυπνη λύση! Και όντως αρκετά πιο κομψή.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  18-09-2006, 18:55 16867 σε απάντηση της 16865

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

    Είναι η πρώτη φορά που βρήκα πρακτική χρήση της Partial Class, πέρα από το να κρύβει τον κώδικα του designer Smile
    Vir prudens non contra ventum mingit
  •  18-09-2006, 19:00 16868 σε απάντηση της 16867

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

    Είναι γενικά πρακτική για να επεκείνεις κλάσεις που δημιουργούνται αυτόματα από το VS:

    - φόρμες

    - typed datasets

    - web service proxies :) :) :)

    κλπ.κλπ.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  19-09-2006, 14:41 16917 σε απάντηση της 16867

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

     KelMan wrote:
    Είναι η πρώτη φορά που βρήκα πρακτική χρήση της Partial Class, πέρα από το να κρύβει τον κώδικα του designer Smile


    Βοηθά πολύ όταν έχεις μεγάλες κλάσεις, αλλά και όταν δουλεύεις με source control και exclusive check outs. Στη δεύτερη περίπτωση μειώνει δραματικά το μόνιμο καυγά "άσε το αρχείο να το πάρω εγώ".


    Νατάσα Μανουσοπούλου
  •  25-09-2006, 20:55 17165 σε απάντηση της 16746

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

     KelMan wrote:

    Ουπς! Αυτό που περιέγραψα ήταν framework 1.1 τεχνική. Δεν είχα πάρει χαμπάρι ότι το (ψιλό)έφτιαξαν στο 2.0: http://quickstarts.asp.net/QuickStartv20/webservices/doc/TypeSharing.aspx

    Επανέργχομαι στο θέμα, γιατι τώρα που προσπάθησα να το υλοποιήσω, είδα ότι τελικά η παραπάνω λύση αναφέρεται σε type sharing μεταξύ δυο web services. Αυτό που θέλω να κάνω εγώ είναι type sharing μεταξύ ενός web service και ενός τοπικού assembly. Για παράδειγμα αν έχω ένα web service το οποίο επιστρέφει ένα dataset (public function myService() as dataset) τότε προφανώς το VS δεν θα δημιουργήσει ένα νέο dataset type ως proxy class. Οπότε το proxy class θα έχει public function myService() as dataset, όπως ακριβώς και το web service. Αν όμως αντί για dataset επιστρέφει μια custom class π.χ. public function myService() as myAssembly.MyCustomClass, τότε η proxy class θα γίνει public function myService() as myWebService.MyCustomClass.

    Πάλι το ερώτημα: Μπορώ να κάνω την proxy class να επιστρέφει τον ίδιο ακριβώς τύπο με το webservice, όπως ακριβώς γίνεται και όταν το web service επιστρέφει ένα αντικείμενο όπως το dataset;


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  25-09-2006, 21:05 17168 σε απάντηση της 17165

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

    Ναι, το συγκεκριμένο κάνει share μεταξύ δύο web services. Ωστόσο το αποτέλεσμα της διαδικασίας είναι το ίδιο με αυτό που περιγράφω στο προηγούμενο post (το χειροκίνητο editing). Το partial-class-κόλπο δεν σε ενδιαφέρει;
    Vir prudens non contra ventum mingit
  •  25-09-2006, 22:20 17179 σε απάντηση της 17168

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

     KelMan wrote:
    Ναι, το συγκεκριμένο κάνει share μεταξύ δύο web services. Ωστόσο το αποτέλεσμα της διαδικασίας είναι το ίδιο με αυτό που περιγράφω στο προηγούμενο post (το χειροκίνητο editing). Το partial-class-κόλπο δεν σε ενδιαφέρει;

    Σίγουρα έχει και αυτό ενδιαφέρον. Απλά με έχει πιάσει η περιέργια, γιατί δημιουργείται proxy class για την δική μου custom class και όχι για το dataset ή το datatable ή άλλες classes του .net framwork.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  26-09-2006, 01:59 17195 σε απάντηση της 17179

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

    Χμμμμ... Δεν καταλαβαίνω...  Τι εννοείς λέγοντας ότι δημιουργείται proxy class για τη δική συο κλάση αλλά όχι για το DataSet; Πως το διαπιστώνεις αυτό;

    Το proxy class είναι του Web Service και σκοπός του είναι να κάνει marshaling τις κλήσεις ώστε να είναι διαφανής η χρήση του από τους clients. Μέσα σε αυτό υπάρχουν τα type definitions από ό,τι class είναι exposed από το web service, ως παράμετρος ή ως returned value (ώστε να μπορείς να τα χρησιμοποιήσεις στον client). Αν ανοίξεις το Reference.vb θα δεις τα partial classes είτε πρόκειται για DataSet, είτε πρόκειται για δικό σου type. Απο εκεί και πέρα, αν στο δικό σου type δεν έχεις μόνο state, τότε θα πρέπει να καταφύγεις σε αυτά που λέγαμε γιατί τα type definitions που ορίζονται μέσα στο proxy δεν έχουν μεθόδους.


    Vir prudens non contra ventum mingit
  •  26-09-2006, 10:53 17214 σε απάντηση της 17195

    Απ: Web Service - Customization της proxy class που δημιουργεί το VS

     KelMan wrote:
    Αν ανοίξεις το Reference.vb θα δεις τα partial classes είτε πρόκειται για DataSet, είτε πρόκειται για δικό σου type.

    Όχι ακριβώς. Το VS δεν δημιουργεί proxy class για το dataset. Και αυτή είναι η αποροία μου. Με πιο κριτήριο δεν τη δημιουργεί, ενώ δημιουργεί proxy class για το δικό μου class. Έψαξα τα attributes του dataset (reflector) αλλά δεν βρήκα κάτι. Ως αποτέλεσμα το dataset παραμένει System.Data.DataSet ενώ η δική μου class από MyAssembly.MyClass γίνεται ProxyWebServiceName.MyClass.

    Ελπίζω να είναι κατανοητό τώρα...


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

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