[VB ASP.NET] SOAP return als xml / text naar dataset

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goeiemiddag,

Ik ben bezig om een SOAP request te zenden en de response ervan in een dataset te krijgen.
Ik krijg een response van de request maar volgens mij klopt deze niet helemaal. Ik krijg namelijk nog wat extra tekst mee die ik eigenlijk niet wil waardoor naar mijn idee het vullen van de dataset misloopt.
Mijn request code is als volgt:
(Ik heb een paar url's weggelaten omdat ik ze niet kan geven)
Visual Basic: request.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        Dim objHTTP As New MSXML2.XMLHTTP
        Dim strEnvelope As String
        Dim objReturn As String

        strEnvelope = "<?xml version='1.0' encoding='UTF-8' standalone='no' ?>" & _
                  "<soap:Envelope xmlns:soap='http://www.w3.org/2003/05/soap-envelope' xmlns:ser='*URL*'>" & _
                    "<soap:Header/>" & _
                    "<soap:Body>" & _
                        "<ser:showOrderReport>" & _
                            "<queryFilter>" & _
                                "<dateRange rangePattern='Mm1'>" & _
                                    "<from/>" & _
                                    "<to/>" & _
                                "</dateRange>" & _
                            "</queryFilter>" & _
                        "</ser:showOrderReport>" & _
                    "</soap:Body>" & _
                "</soap:Envelope>"


        objHTTP.open("POST", "", False)
        objHTTP.setRequestHeader("Content-Type", "application/soap+xml; charset-utf-8")
        objHTTP.send(strEnvelope)
        objReturn = objHTTP.responseText
        Dim dataset As DataSet = New DataSet
        Dim dataTable As DataTable = New DataTable("table1")
        dataTable.Columns.Add("resultSize", Type.GetType("System.String"))
        Dim xmlData As String = objReturn
        Dim xmlSR As System.IO.StringReader = New System.IO.StringReader(xmlData)
        dataset.ReadXml(xmlSR, XmlReadMode.IgnoreSchema)
        Return dataset


Wanneer ik dit uitvoer krijg ik een foutmelding:
code:
1
 Gegevens op hoofdniveau zijn ongeldig. Regel 1, positie 1


Ik heb de code geprobeerd zonder heel het dataset gebeuren. Wat ik dan doe is het volgende:
code:
1
2
3
4
        objHTTP.open("POST", "*URL*", False)
        objHTTP.setRequestHeader("Content-Type", "application/soap+xml; charset-utf-8")
        objHTTP.send(strEnvelope)
        objReturn = objHTTP.responseText


Het volgende krijg ik dan terug (ik kan niet de hele xml geven omdat er dingen instaan die ik verder niet wil geven
code:
1
2
3
------=_Part_0_1538168342.1300112835360 Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml"; Content-Transfer-Encoding: binary Content-ID: 
*XML code*
------=_Part_0_1538168342.1300112835360--


Maar volgens mij hoor ik bovenstaande gegevens toch niet te krijgen (de code boven en onder *XML code*)? Kan het daarom zijn dat ik een melding krijg dat gegevens op hoofdniveau ongeldig zijn? Zoja, wat doe ik fout en hoe krijg ik puur alleen de XML code zonder headers.

[ Voor 8% gewijzigd door Verwijderd op 26-03-2011 18:43 ]


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Volgens mij is er ook een ResponseXml.

Visual Basic:
1
objReturn = objHTTP.responseXml

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:51

Janoz

Moderator Devschuur®

!litemod

Wat je terug krijgt is volledig legitieme mime multipart message. Dit kun je ook zien wanneer je de content type van het response opvraagt. Je probleem is dat je hetgeen je terug krijgt zomaar zonder te verifieren rechtstreeks in je xml parser gooit.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke, en wat is dan de beste manier om puur de soap message te krijgen zodat ik die vervolgens in een dataset kan zetten?
Ik heb het wel met responseXml geprobeerd maar ik ben niet erg ervaren met programmeren dus weet niet wat ik dan vervolgens moet doen met objReturn nadat ik responsexml hierin zet.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:51

Janoz

Moderator Devschuur®

!litemod

Je kunt 2 dingen doen:
1 Op zoek gaan naar een mime parser
2 Gokken dat het altijd een multipart mime content type is en gewoon de eerste en de laatste regel van de response text wegpoetsen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke hartelijk dank!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is uiteindelijk gelukt om alles met readXML uit te lezen. Alle MIME dingen heb ik weggehaald met Mid() en InStr(). Momenteel wordt alles in een dataset gestopt.
Alleen wanneer ik via readXML alles in een dataset stop krijg ik 8 tabellen in totaal. Liever heb ik alles in 1 tabel. Is dit direct bij het lezen al mogelijk of moet ik naderhand handmatig 8 tabellen gaan samenvoegen? Het liefst krijg ik direct 1 tabel zodat ik daarna d.m.v. LINQ oid de gewenste kolommen kan selecteren en returnen. Mocht dit niet lukken. Wat raad je dan aan? Met LINQ alles samenvoegen of handmatig alles in een nieuwe tabel/dataset zetten?
Dank!

Acties:
  • 0 Henk 'm!

  • SiErRa
  • Registratie: Februari 2000
  • Laatst online: 09:57
Waarom gebruik je zo'n vreemde manier om webservice calls uit te zetten?
Daar hebben we toch WCF voor (of desnoods System.Web.Services als je geen .Net 3+ kan doen)?

Dan krijg je gewoon objecten terug, die je dan weer in een DataSet kan stoppen.

Daarnaast suggereert dat xop mimetype dat de webservice iets met MTOM doet, wat ook een stuk beter gaat met WCF dan het zelf te moeten implementeren.
Pagina: 1