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

 

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

Simple XML Web Service

Îåêßíçóå áðü ôï ìÝëïò mike_devlearner. Τελευταία δημοσίευση από το μέλος KelMan στις 02-07-2007, 18:49. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-06-2007, 11:23 33175

    Simple XML Web Service

    Καλησπέρα σε όλους.
    Μπήκα λοιπόν στον χωρό με τα Web Services.
    Χρησιμοποιώ VS2003 δουλεύοντας μια Local εφαρμογή, απο την άλλη έχω έναν Server 2000 με ASP 2.0 . Για να δημιουργήσω το asmx project μου , χρησιμοποιώ VS2005 όπου και το δημιουργώ στον Server 2000 , δουλεύει το default 'Hello World' service κανονικάτατα.
    Μέσα απο γνωστό βιβλίο(για VS2005) φτίαχνω ένα Web Service το οποίο περνάει σαν παράμετρο ένα string και το επιστρέφει πίσω στον client,ένα απλό web service δηλαδή.
    Χρησιμοποιεί το HTTP-GET για να κάνει ένα request και να επιστρέψει το string.

    Εγώ αυτό που κάνω είναι ότι  παραμετροποιώ λίγο τον κώδικα έτσι ώστε να στέλνω ένα MSXML2 DOMDocument και απλά να περιμένω απο το web service να επιστραφεί.



    quote:Local Application (VS2003) :

    MSXML2.DOMDocument xmldoc=new DOMDocumentClass();
    MSXML2.DOMDocument DOMResponse=new DOMDocumentClass();
    MSXML2.XMLHTTP xmlget=new XMLHTTPClass();

    quote:TESTXML is the name of my webservice, doc is the parameter and xmldoc is my xmlDocument.
    xmlget.open("GET","http://webdev:120/WebService2005/Service.asmx/TESTXML?doc="+xmldoc,false,"","");

    xmlget.send("TESTXML");

    DOMResponse=(MSXML2.DOMDocument30)xmlget.responseXML; <------  Error







    quote: Web Service(VS2005) :


    [WebMethod]
    public System.Xml.XmlDocument TESTXML(System.Xml.XmlDocument doc)
    {


    return doc;
    }


    Το πρόβλημα που εμφανίζεται είναι το εξής, όταν περνάω σαν παράμετρο το xmldoc χτυπάει το εξής error:

    'The system cannot locate the resource specified' .

    Φανταστείτε τον ίδιο κώδικα με string παραμέτρους να δουλέυει κανονικά, για κάποιον λόγο όταν περνάει διαφορετικού τύπου παράμετρος χτυπάει,έχω δοκιμάσει να στείλω το xmlget.send(""); κενό αλλά πάλι το ίδιο error.

    Εδώ και περίπου 1  βδομάδα ψάχνω μέσω internet να βρώ τρόπους να περάσω ενα DOMDocument,XML Document χωρίς να χρησιμοποιώ web reference ή κάποιο άλλο .NET module(ίσως κάνω λάθος στην λέξη module) , διστυχώς δεν έχω βρεί κάτι generic, προσπαθώ να το κάνω αυτό έτσι ώστε ένα πρόγραμμα γραμμένο σε java να μπορεί να κάνει request και να έχει μια απάντηση.

  •  26-06-2007, 17:35 33188 σε απάντηση της 33175

    Απ: Simple XML Web Service

    Καταρχήν μπερδεύτηκα. Έχεις μια local εφαρμογή σε VS2003 και από την άλλη SQL 2000 με ASP 2.0. Τι εννοείς "από την άλλη"; Επίσης λες ότι δημιουργείς ένα asmx project με VS2005 σε SQL 2000! Μάλλον κάτι άλλο θέλεις να πεις, αλλά αφού σου δουλεύει το αφήνουμε.

    "Γνωστό βιβλίο"... πες μας ποιο είναι, δεν θα θεωρηθεί διαφήμιση.

    Ρίξε μια ματιά για το πως δημιουργείται ένας client για ένα web service στο βιβλίο σου. Θα δεις ότι είναι αρκετά πιο απλό από ότι νομίζεις. Το Visual Studio μπορεί να σου δημιουργήσει φιλικό κώδικα που να κρύβει όλα αυτά που προσπαθείς να κάνεις. Κάνε ένα νέο Windows Forms project, κάνε δεξί κλικ σε αυτό στον Solution Explorer και πάτα Add Web Reference. Στο παράθυρο που θα ανοίξει γράψε τη διεύθυνση του service σου. Π.χ. http://webdev:120/WebService2005/Service.asmx.

    Έτσι θα δημιουργηθεί αυτόματα μια κλάση που θα λέγεται webdev (εκτός κι αν το άλλαξες στο παράθυρο που μόλις σου είπα). Μπορείς να την χρησιμοποιήσεις γράφοντας

    Dim myService As New webdev
    myService.testXML κλπ.
     


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  27-06-2007, 10:53 33210 σε απάντηση της 33188

    Απ: Simple XML Web Service

    Καλησπέρα Δημήτρης,

    Ανέφερα Server 2000 και οχι SQL 2000, Όταν εννοώ 'απο την  άλλη', θέλω να πώ στον server που κάνω host όλο το project μου, συγνώμη για το μπέρδεμα.

    Ναι όντως είναι μια πολύ καλή λύση το Web Reference αλλά το θέμα είναι ότι θέλω το web service μου να είναι generic,(Για .NET εφαρμογή απο VS2003&2005 σε μια local application είναι ότι καλύτερο το Web Reference πιστεύω) δηλαδή να μπορώ με κάποιον τρόπο να κάνω απο διάφορες πλατφόρμες Java, Lotus Notes και άλλα να κάνω ένα HTTP-GET('η κάτι άλλο που δεν ξέρω) & να περνάω το XML Doc και να στέλνω απάντηση.


  •  27-06-2007, 11:15 33212 σε απάντηση της 33210

    Απ: Simple XML Web Service

    mike_devlearner:
    Ανέφερα Server 2000 και οχι SQL 2000, Όταν εννοώ 'απο την  άλλη', θέλω να πώ στον server που κάνω host όλο το project μου, συγνώμη για το μπέρδεμα.

    Ναι, τώρα που το λες το πρόσεξα. Είχα μπερδευτεί, αλλά τώρα ξεμπερδεύτικα! Big Smile

    mike_devlearner:
    Ναι όντως είναι μια πολύ καλή λύση το Web Reference αλλά το θέμα είναι ότι θέλω το web service μου να είναι generic,(Για .NET εφαρμογή απο VS2003&2005 σε μια local application είναι ότι καλύτερο το Web Reference πιστεύω) δηλαδή να μπορώ με κάποιον τρόπο να κάνω απο διάφορες πλατφόρμες Java, Lotus Notes και άλλα να κάνω ένα HTTP-GET('η κάτι άλλο που δεν ξέρω) & να περνάω το XML Doc και να στέλνω απάντηση.

    Το web reference το κάνεις για να διευκολυνθείς όταν θέλεις να καλέσεις ένα web service από έναν windows client. Είτε το web service είναι γραμμένο σε .net είτε σε java είστε σε... gwbasic Hmm!!! Επειδή λοιπόν το κάνεις στον client και όχι στο web service, δεν επηρεάζεις καθόλου το service σου, κανοντάς το να μην μπορεί να κληθεί από java client (ή gwbasic client)! Οπότε... κάνεις web reference για να καλέσεις εσύ απο τον δικό σου windows client οποιοδήποτε web service (έστω κι αν είναι δικό σου). Ταυτόχρονα κάποιος που θα γράψει έναν java client θα χρησιμοποιήσει ότι του προσφέρει η java και το IDE που χρησιμοποιεί για να χρησιμοποιήσει το service σου.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  27-06-2007, 14:15 33218 σε απάντηση της 33212

    Απ: Simple XML Web Service

    Πολύ σωστά αυτά που αναφέρεις αλλά γιατί να μην μπορεί να γίνει με ενα απλό HTTP request , αυτό είναι και το αρχικό μου ερώτημα κιόλας.
  •  27-06-2007, 15:02 33220 σε απάντηση της 33218

    Απ: Simple XML Web Service

    Μπορεί να γίνει κι έτσι. Το έχω κάνει παλιότερα με vb6 client που φυσικά δεν υποστήριζε web reference. Με μια γρήγορη ματιά, το URL σου δεν είναι σωστό:

    http://webdev:120/WebService2005/Service.asmx/TESTXML?doc

    Λογικά μετά το .asmx δεν πρέπει να έχεις /, αλλά ?. Προφανώς γι αυτό παίρνεις cannot find the resource specified exception. 


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  27-06-2007, 17:50 33225 σε απάντηση της 33210

    Απ: Simple XML Web Service

    mike_devlearner:

    Ναι όντως είναι μια πολύ καλή λύση το Web Reference αλλά το θέμα είναι ότι θέλω το web service μου να είναι generic,(Για .NET εφαρμογή απο VS2003&2005 σε μια local application είναι ότι καλύτερο το Web Reference πιστεύω) δηλαδή να μπορώ με κάποιον τρόπο να κάνω απο διάφορες πλατφόρμες Java, Lotus Notes και άλλα να κάνω ένα HTTP-GET('η κάτι άλλο που δεν ξέρω) & να περνάω το XML Doc και να στέλνω απάντηση.

    Χμμμ... Δεν καταλαβαίνω που είναι το πρόβλημα... Τα web services που φτιάχνεις μέσα από τo .NET Framework βασίζονται σε τυποποιήσεις που τα καθιστούν έτοιμα προς χρήση από οποιαδήποτε πλατφόρμα/client αρκεί να παίζει με αυτές τις τυποποιήσεις (HTTP, XML, SOAP, κλπ). Από εκεί και πέρα το μόνο πρόβλημά σου είναι να μπορεί να καταλάβει ο client τι πρέπει να στείλει και να λάβει. Δηλαδή αν πας να φτιάξεις ένα web service που να ανταλλάσει DataSets τότε έχεις πρόβλημα με τους μη .ΝΕΤ clients. Το web reference απλά είναι ένας μηχανισμός ανεξάρτητός από το web service που σε διευκολύνει στο development του client.


    Vir prudens non contra ventum mingit
  •  02-07-2007, 10:07 33311 σε απάντηση της 33220

    Απ: Simple XML Web Service

    Dimitris Papadimitriou:

    Μπορεί να γίνει κι έτσι. Το έχω κάνει παλιότερα με vb6 client που φυσικά δεν υποστήριζε web reference. Με μια γρήγορη ματιά, το URL σου δεν είναι σωστό:

    http://webdev:120/WebService2005/Service.asmx/TESTXML?doc

    Λογικά μετά το .asmx δεν πρέπει να έχεις /, αλλά ?. Προφανώς γι αυτό παίρνεις cannot find the resource specified exception. 



    Αυτός ο τρόπος κλήσεως  σε ένα απλό web service που περνάει μόνο ενα string σαν παράμετρο (το doc στην προκειμένη περίπτωση) είναι αυτός που αναφέρει σε πολύ γνωστό βιβλίο για ASP 2.0 NET όπου και δουλέυει κανονικότατα, το ανέφερα και σε αρχικό μου post, θέλει / για να δηλώσεις ποιό web method θέλεις να καλέσεις , ? για να δηλώσεις input paramenter ,  type 'string' δουλέυει κανονικότατα το project.
    Αποκεί και πέρα για κάτι πιο σύνθετο όπως XML , χρησιμοποιεί 'Web Reference' κάτι το οποίο δεν με ενδιαφέρει, σας γυρνάω πολύ πίσω αλλά αυτό θέλω να παίξει σε VB6, Notes .
    Έκανα την αλλαγή που μου πρότεινες αλλά δεν βρήκα λύση δυστηχώς,ψάχνω στο internet αλλά όλοι web reference χρησιμοποιούνε.

    Ευχαρστώ.
  •  02-07-2007, 10:38 33312 σε απάντηση της 33311

    Απ: Simple XML Web Service

    mike_devlearner:
    Αποκεί και πέρα για κάτι πιο σύνθετο όπως XML , χρησιμοποιεί 'Web Reference' κάτι το οποίο δεν με ενδιαφέρει, σας γυρνάω πολύ πίσω αλλά αυτό θέλω να παίξει σε VB6, Notes .

    Ξέρω τι κάνεις! Προσπαθείς να με βάλεις να ψάξω τον κώδικα της VB6 που έγραψα πριν χρόνια για να με πάρουν τα ζουμιά! Ε, λοιπόν θα το κάνω και αν βρω κάτι θα σου πω. Hold on μέχρι αύριο.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  02-07-2007, 18:49 33332 σε απάντηση της 33311

    Απ: Simple XML Web Service

    mike_devlearner:
    Αυτός ο τρόπος κλήσεως  σε ένα απλό web service που περνάει μόνο ενα string σαν παράμετρο (το doc στην προκειμένη περίπτωση) είναι αυτός που αναφέρει σε πολύ γνωστό βιβλίο για ASP 2.0 NET όπου και δουλέυει κανονικότατα, το ανέφερα και σε αρχικό μου post, θέλει / για να δηλώσεις ποιό web method θέλεις να καλέσεις , ? για να δηλώσεις input paramenter ,  type 'string' δουλέυει κανονικότατα το project.
    Αποκεί και πέρα για κάτι πιο σύνθετο όπως XML , χρησιμοποιεί 'Web Reference' κάτι το οποίο δεν με ενδιαφέρει, σας γυρνάω πολύ πίσω αλλά αυτό θέλω να παίξει σε VB6, Notes .

    Μπερδεύεις το web reference με το SOAP και γι αυτό δεν βρίσκεις τίποτα.

    Ένα web service μπορεί να κλήθεί με δύο τρόπους. Με HTTP Get/Post και με SOAP. H πρώτη τεχνική είναι για την ανταλλαγή απλών δεδομένων (strings, numbers, κλπ). Η δεύτερη τεχνική είναι για να ανταλλάσεις objects, complex types που δεν μπορού να ανπαρασταθούν όπως προηγουμένως. Η τεχνική με το ? που αναφέρεις είναι το HTTP Get/Post. Το web reference ΔΕΝ είναι η δεύτερη τεχνική, το SOAP.

    Το web reference είναι ένας εύκολος τρόπος να βλέπεις τα web methods ενός web service ως methods σε ένα τοπικό object. Αναλαμβάνει να υλοποιήσει όλη την επικοινωνία με το web service χωρίς να χρειάζεται να ασχοληθείς με SOAP, HTTP, GET, POST, κλπ. Το μόνο πρόβλημα είναι ότι αυτό το κόλπο είναι μόνο για .ΝΕΤ development. Για άλλες πλατφόρμες θα πρέπει να ψάξεις πώς θα ανταλλάσεις δεδομένα μέσω SOAP. Στη VB6 υπήρχε (αν θυμάμαι καλά) ένα SOAP API, ωστόσο ήταν αρκετά τα πράγματα που θα έπρεπε να κάνει ο προγραμματιστής. Θα πρέπει ανάλογα να ψάξεις και για τις υπόλοιπες πλατφόρμες.


    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems