Solved

VB.NET and SOAP - multiple records in a datagridview

Posted on 2010-09-15
3
807 Views
Last Modified: 2012-06-22
I am working with an external SOAP webservice that contains real-time information about ships around the world. I have successfully written code that passes username, password and IMO number and returns information about a single ship. I am now trying to pass username, password and bounding latitude/longitude values to return information on all of the ships in the area.

My question is how to handle multiple records (multiple ships). Getting information about 1 ship was easy, I would declare a new vessel and get the returned name, call sign, destination, status, etc. Now I need to get all of that information for multiple ships. I would like to bind this to a datatable and write it to a text file. I think I just need a little direction about how to read the data (XMLreader? something else to store response into a table?) and I can take it from there.

My code for one vessel and the SOAP response for multiple records is attached.

Thanks in advance!

My code for getting information on one ship:



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click



        'initiate service

        Dim svc As New ServiceReference1.VtrServiceClient



        'set up an instance of vessel class to contain ship information

        Dim jdvessel As New ServiceReference1.vessel

        Dim jdTable As New DataTable("vessel")



        Try

            jdvessel = svc.getVesselByIMO("myusername", "password", 123456)



            jdTable.Columns.Add("Call Sign")

            jdTable.Columns.Add("Name")

            jdTable.Columns.Add("Destination")

            jdTable.Columns.Add("Status")



            Dim row1 As DataRow



            row1 = jdTable.NewRow

            row1.Item("Call Sign") = jdvessel.sCallsign.ToString

            row1.Item("Name") = jdvessel.sName.ToString

            row1.Item("Destination") = jdvessel.sDestination.ToString

            row1.Item("Status") = jdvessel.sStatus.ToString



            jdTable.Rows.Add(row1)



            DataGridView1.DataSource = jdTable



        Catch ex As Exception

            MsgBox(ex.ToString)

        End Try



    End Sub





SOAP response for more than one vessel:



<S:Body>

        <ns2:getVesselsInAreaResponse xmlns:ns2="http://webservice.ejb.vesseltracker.com/">

            <return>

                <nMMSI>211177390</nMMSI>

                <dAgeMinutes>-2.4091</dAgeMinutes>

                <dLat>53.856178283691406</dLat>

                <dLon>8.72246265411377</dLon>

                <dSoG>0.0</dSoG>

                <nWidth>10</nWidth>

                <nLength>100</nLength>

                <dDraught>0.0</dDraught>

                <sName>ALASCO</sName>

                <sCallsign>DC5553</sCallsign>

                <sDestination/>

                <sStatus>moored</sStatus>

                <sVesselType>Cargo ship</sVesselType>

            </return>

            <return>

                <nMMSI>211223460</nMMSI>

                <nIMO>8521426</nIMO>

                <dAgeMinutes>-2.4924333333333335</dAgeMinutes>

                <dLat>53.858768463134766</dLat>

                <dLon>8.717516899108887</dLon>

                <dHeading>314.0</dHeading>

                <dSoG>0.0</dSoG>

                <nWidth>12</nWidth>

                <nLength>51</nLength>

                <dDraught>3.4</dDraught>

                <sName>ATAIR</sName>

                <sCallsign>DBBI</sCallsign>

                <sDestination>Cuxhaven</sDestination>

                <dtETA>2010-09-08T10:00:00+02:00</dtETA>

                <sStatus>moored</sStatus>

                <sVesselType>Unknown type of ship</sVesselType>

            </return>

</S:Body>

Open in new window

0
Comment
Question by:dobbinjp
3 Comments
 
LVL 53

Accepted Solution

by:
Dhaest earned 500 total points
Comment Utility
You can read the xml-string into a dataset directly

example below:

Some remarks: you need to remove the ns from the xml
       string myXml = "<S:Body>" +

                    //"<ns2:getVesselsInAreaResponse xmlns:ns2=\"http://webservice.ejb.vesseltracker.com/\">" + 

                    "<return>" + 

                        "<nMMSI>211177390</nMMSI>" + 

                        "<dAgeMinutes>-2.4091</dAgeMinutes>" + 

                        "<dLat>53.856178283691406</dLat>" + 

                        "<dLon>8.72246265411377</dLon>" + 

                        "<dSoG>0.0</dSoG>" + 

                        "<nWidth>10</nWidth>" + 

                        "<nLength>100</nLength>" + 

                        "<dDraught>0.0</dDraught>" + 

                        "<sName>ALASCO</sName>" + 

                        "<sCallsign>DC5553</sCallsign>" + 

                        "<sDestination/>" + 

                        "<sStatus>moored</sStatus>" + 

                        "<sVesselType>Cargo ship</sVesselType>" + 

                    "</return>" + 

                    "<return>" + 

                        "<nMMSI>211223460</nMMSI>" + 

                        "<nIMO>8521426</nIMO>" + 

                        "<dAgeMinutes>-2.4924333333333335</dAgeMinutes>" + 

                        "<dLat>53.858768463134766</dLat>" + 

                        "<dLon>8.717516899108887</dLon>" + 

                        "<dHeading>314.0</dHeading>" + 

                        "<dSoG>0.0</dSoG>" + 

                        "<nWidth>12</nWidth>" + 

                        "<nLength>51</nLength>" + 

                        "<dDraught>3.4</dDraught>" + 

                        "<sName>ATAIR</sName>" + 

                        "<sCallsign>DBBI</sCallsign>" + 

                        "<sDestination>Cuxhaven</sDestination>" + 

                        "<dtETA>2010-09-08T10:00:00+02:00</dtETA>" + 

                        "<sStatus>moored</sStatus>" + 

                        "<sVesselType>Unknown type of ship</sVesselType>" + 

                    "</return>" + 

                "</S:Body>";

            //myXml = myXml.Substring(myXml.IndexOf("<return>"));

            myXml = myXml.Replace("S:Body", "Body");

            XmlReader xmlReader = new XmlTextReader(new MemoryStream(ASCIIEncoding.Default.GetBytes(myXml)));

            DataSet ds = new DataSet();



            ds.ReadXml(xmlReader);

Open in new window

0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
Comment Utility
This question has been classified as abandoned and is being closed as part of the Cleanup Program. See my comment at the end of the question for more details.
0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Creating an analog clock UserControl seems fairly straight forward.  It is, after all, essentially just a circle with several lines in it!  Two common approaches for rendering an analog clock typically involve either manually calculating points with…
Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
The purpose of this video is to demonstrate how to set up the WordPress backend so that each page automatically generates a Mailchimp signup form in the sidebar. This will be demonstrated using a Windows 8 PC. Tools Used are Photoshop, Awesome…
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now