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

 

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

Πρόβλημα στην επιστροφή xml απο webservice

Îåêßíçóå áðü ôï ìÝëïò thoidis. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 08-03-2011, 11:51. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-03-2011, 10:44 63967

    Πρόβλημα στην επιστροφή xml απο webservice

    Εχω ένα webservice το οποίο θέλω να επιστρέφει δεδομένα σε μορφή xml
    Αφού δημιουργήσω το xml είτε σαν xmldoc είτε σαν StringBuilder το επιστρέφω σαν string και παρουσιάζεται το εξής πρόβλημα:
    1. Υπάρχει ένα xml tag στην αρχή του με όνομα <string> και στο τέλος </string> και όλα τα δικά μου tag ενώ εμφανίζονται στην οθόνη δεν είναι δομημένα. Ψάχνοντας είδα στον κώδικα του browser ότι ενώ το tag <string> έχει κανονικά αγκύλες δηλαδή < και > τα δικά μου tag έχουν τους χαρακτήρες & l t ;  και / & g t ; (ενωμένους φυσικά) οι οποίοι εμφανίζονται μεν κανονικά στην οθόνη ως < και > αλλά δεν αναγνωρίζονται ώς tag στην xml.
    Ξέρει κάποιος είτε τον τρόπο να επιστρέψω το xml σαν string χωρίς το tag string και κυρίως με τους σωστούς χαρακτήρες είτε τον τρόπο επιστροφής του xml με κάποια μορφή αναγνωρίσιμη ως xml

    Ευχαριστώ

       Public Function login(ByVal xmlstring As String) As String
            Dim FakeQuantity As Integer
            Dim Doc As New XmlDocument()
            Dim newAtt As XmlAttribute
    
    
            Dim dec As XmlDeclaration = Doc.CreateXmlDeclaration("1.0", _
                                             Nothing, Nothing)
            Doc.AppendChild(dec)
            Dim DocRoot As XmlElement = Doc.CreateElement("Orders")
            Doc.AppendChild(DocRoot)
    
            Dim x As Integer
            For x = 0 To 11
                Dim Order As XmlNode = Doc.CreateElement("Order")
                newAtt = Doc.CreateAttribute("Quantity")
                FakeQuantity = 10 * x + x
                newAtt.Value = FakeQuantity.ToString()
                Order.Attributes.Append(newAtt)
                DocRoot.AppendChild(Order)
            Next
            Return Doc.OuterXml
    
    end function


    Περικλής Θωίδης
    ____________________________________
    Η μεγάλη ανανέωση του κόσμου δεν θα έρθει τη στιγμή που οι φτωχοί θα συμβιβαστούν με τη μοίρα τους,
    αλλά τη στιγμή που οι πλούσιοι θ' αρχίσουν να έχουν ηθικούς δισταγμούς για τη δική τους μοίρα!
  •  07-03-2011, 02:37 63996 σε απάντηση της 63967

    Απ: Πρόβλημα στην επιστροφή xml απο webservice

    Μην επιστρέφετε string αλλά XmlDocument. Δεν υπάρχει λόγος να επιστρέφετε string και παίζει και σε clients φτιαγμένους σε άλλες γλώσσες εκτός framework. Τα &lt και &gt; δεν είναι <> (tags) αλλά μικρότερο και μεγαλύτερο.  
    <?xml version="1.0" encoding="utf-8" ?>
    <root>
      <!-- Αυτό θα παίξει-->
      Your age is &lt; 18
    </root>
    
    <?xml version="1.0" encoding="utf-8" ?>
    <root>
      <!-- Αυτό δεν θα παίξει-->
      Your age is < 18
    </root>
    &lt;<less than
    &gt;>greater than
    &amp;&ampersand
    &apos;'apostrophe
    &quot;"quotation mark
    &lt;<less than
    &gt;>greater than
    &amp;&ampersand
    &apos;'apostrophe
    &quot;"quotation mark
  •  07-03-2011, 21:38 64016 σε απάντηση της 63996

    Απ: Πρόβλημα στην επιστροφή xml απο webservice

    Βασικά, δεν πρέπει καν να επιστρέφει ή να δέχεται XML. Οι παράμετροι και ο τύπος που επιστρέφει ένα Web Service πρέπει να είναι καθορισμένοι, διαφορετικά οι ταλαίπωροι οι clients δεν θα έχουν ιδέα πως να καλέσουν το web service. Εξάλλου το .NET αναλαμβάνει αυτόματα το serialization/deserialization από XML προς αντικείμενα και το αντίστροφο. Αν θέλεις η μέθοδος σου να επιστρέφει μία λίστα από αντικείμενα Order, το μόνο που χρειάζεται είναι να επιστρέψεις αυτό ακριβώς, ένα List<Order>.

    Ως τώρα κάθε φορά που έχω δει προσπάθεια να επιστρέψει κάποιος XML οφείλεται σε παρανόηση του τί είναι και πως δουλεύουν τα web services. Η απλούστερη περίπτωση είναι να μην ξέρει κανείς ότι σε ένα web service είναι αυστηρά καθορισμένοι οι τύποι των αντικειμένων που επιστρέφει, ή ότι το .NET κάνει αυτή τη δουλειά πανεύκολα. Σε αυτή την περίπτωση καλό είναι να ξεκινήσει κανείς από βασικά tutorials και βιβλία.

    Η άλλη περίπτωση οφείλεται πάλι σε παρανόηση αλλά είναι πιο επικίνδυνη. Κάποιοι πιστεύουν ότι η εφαρμογή τους θα είναι πιο ευέλικτη αν επιστρέφουν ένα XML ή string αντί για συγκεκριμένο τύπο, γιατί έτσι δεν θα είναι αναγκασμένοι να αλλάζουν τις κλάσεις τους όταν αλλάζουν τα δεδομένα που επιστρέφουν. Αυτό φυσικά είναι απλά παράλογο, καθώς όλοι οι clients θα "σκάσουν" αυτομάτως με την πρώτη αλλαγή, και κανείς δεν θα ξέρει γιατί.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  08-03-2011, 09:10 64023 σε απάντηση της 63996

    Απ: Πρόβλημα στην επιστροφή xml απο webservice

    Δυστυχώς το webservice γίνεται κατά παραγγελία και αυτός που θα δεχθεί τα δεδομένα θέλει να είναι τύπου string και σε συγκεκριμένη μορφή XML.
    Δεν ξέρω προς το παρόν πως θα συμπεριφερθεί η εφαρμογή λήψης των δεδομένων που δυστυχώς δεν είναι ακόμη έτοιμη για δοκιμές αλλά είναι πιθανό να δουλέψει...
    Ευχαριστώ πάντως για τις πληροφορίες και τη βοήθεια.


    Αυτό που προέκυψε όμως είναι ότι επειδή η λήψη των δεδομένων προϋποθέτει login και χρειάζεται διαχείριση του session όταν οι ρουτίνες καλούνται από κάποιον web browser το session λειτουργεί κανονικά. Όταν όμως το web service καλείται από εφαρμογή web service client δεν είναι δυνατή η διατήρηση του session και σε κάθε κλήση κάποιας ρουτίνας δημιουργείται νέο session. Μήπως υπάρχει κάποια ιδέα για την διατήρηση του session και των μεταβλητών του μεταξύ κλήσεων από διαφορετικές ρουτίνες κλήσης. Διάβασα κάτι για cookieless και κάτι μεθόδους για proxy κλήση των ρουτίνων και διατήρηση των μεταβλητών π.χ. σε έναν μετρητή αλλά σε μένα δεν δούλεψε.

    Κάποια ιδέα για τη λύση του;

     


    Περικλής Θωίδης
    ____________________________________
    Η μεγάλη ανανέωση του κόσμου δεν θα έρθει τη στιγμή που οι φτωχοί θα συμβιβαστούν με τη μοίρα τους,
    αλλά τη στιγμή που οι πλούσιοι θ' αρχίσουν να έχουν ηθικούς δισταγμούς για τη δική τους μοίρα!
  •  08-03-2011, 11:51 64027 σε απάντηση της 64023

    Απ: Πρόβλημα στην επιστροφή xml απο webservice

    Σου προτείνω ξανά να ξεκινήσεις από τα βασικά των web services γιατί υπάρχουν κενά. Δεν έχει σημασία τί παραγγέλνει ο πελάτης. "Πέρδικα ψητή σε κέρινο σουβλί" δεν γίνεται. Άσε που είμαι σίγουρος ότι ο πελάτης ΔΕΝ παράγγειλε "να μου φέρνει χύμα xml". Άσε που τα web services ήδη σου επιστρέφουν xml, απλά δεν το τυλίγουν στο εντελώς περιττό string. Κάτι άλλο θέλει και δεν το περιγράφει σωστά. Θα πρέπει να ρωτήσεις "γιατί" θέλει string και xml. Δεν του αρκεί απλό XML? Ή μήπως ο πελάτης σου έχει δώσει το wsdl και θεώρησες ότι πρέπει να επιστρέφεις string?
    Οι πελάτες δεν είναι χαζοί αλλά δεν είναι και προγραμματιστές. Δεν μπορείς να παίρνεις ότι σου λένε ως ευαγγέλιο. Μερικές φορές πρέπει να κουβεντιάσεις αρκετά για να βρεις τί ακριβώς σου ζητάνε και να αποφύγεις τσάμπα δουλειά. Δυστυχώς, το "εσύ μου είπες να το κάνω" δεν πιάνει. Η απάντηση είναι πάντα "Ναι, αλλά τώρα το θέλω αλλιώς και δεν πληρώνω".

    Μήπως σου είπαν ότι θέλουν συγκεκριμένο σχήμα, αλλά δεν σου έδωσαν έτοιμο το WSDL? Μπορείς να κάνεις το ASP.NET να επιστρέφει ακριβώς το XML που χρειάζεσαι, φτιάχνοτας τις κατάλληλες κλάσεις. Αν χρειαστεί κάτι ιδιαίτερο, μπορείς να το καλύψεις απλά προσθέτωντας attributes στο web service. Αν έχεις το wsdl ή έστω και μόνο το κομμάτι που αφορά το δικό σου service μπορείς πανεύκολα να δημιουργήσεις τις κατάλληλες κλάσεις με το wsdl.exe

    Όσον αφορά το session, δες αυτό το άρθρο στο MSDN που περιγράφει πως χρησιμοποιείται το session και τη διαφορά μεταξύ browser και των συνηθισμένων clients.

     


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