I have created restful service with ItemTrackingDetailsRequest as input for GetItemTrackingDetails.
<ServiceContract()> _
Public Interface IItemTrackerService
<OperationContract()> _
<WebInvoke(Method:="POST", RequestFormat:=WebMessageFormat.Xml, ResponseFormat:=WebMessageFormat.Xml, BodyStyle:=WebMessageBodyStyle.Bare, UriTemplate:="GetItemTrackingDetails")> _
Function GetItemTrackingDetails(ByVal rData As ItemTrackingDetailsRequest) As ItemTrackingDetailsResponse
End Interface
<DataContract(Namespace:="http://test.com/ns")> _
Public Class ItemTrackingDetailsRequest
Public ItemTrackingNumbers As New ItemTrackingNumbers()
End Class
<DataContract()> _
Public Class ItemTrackingNumbers
<DataMember()> _
Public TrackingNumber() As String
End ClassThe input xml is as follows
<ItemTrackingDetailsRequest xmlns="http://test.com/ns">
<ItemTrackingNumbers>
<TrackingNumber>A10001</TrackingNumber>
<TrackingNumber>A10002</TrackingNumber>
</ItemTrackingNumbers>
</ItemTrackingDetailsRequest>
How can I read the all the TrackingNumbers to an array from ItemTrackingDetailsRequest class object in the method GetItemTrackingDetails. When I change the TrackingNumber in class from string to string array, it throws bad request from client. Just I want to read all the TrackingNumbers from the xml in to the ItemTrackingDetailsRequest object like this.
Public Function GetItemTrackingDetails(ByVal request As ItemTrackingDetailsRequest) As ItemTrackingDetailsResponse Implements IItemTrackerService.GetItemTrackingDetails
Dim strTrackingNumber1 = request.ItemTrackingNumbers.TrackingNumber(0).ToString()
Dim strTrackingNumber2 = request.ItemTrackingNumbers.TrackingNumber(1).ToString()
End Function
The below is the client calling code
Const url As String = "http://localhost:8003/ItemTracker/ItemTrackerService.svc/GetItemTrackingDetails"
req = DirectCast(WebRequest.Create(url), HttpWebRequest)
req.Method = "POST"
req.ContentType = "application/xml; charset=utf-8"
req.Timeout = 300000
req.KeepAlive = False
req.Headers.Add("SOAPAction", url)
Dim xmlDoc = New XmlDocument With {.XmlResolver = Nothing}
xmlDoc.Load(Server.MapPath("ItemTrackingDetailsReq.xml"))
Dim sXml As String = xmlDoc.InnerXml
req.ContentLength = sXml.Length
Dim sw = New StreamWriter(req.GetRequestStream())
sw.Write(sXml)
sw.Close()
res = DirectCast(req.GetResponse(), HttpWebResponse)
Dim responseStream As Stream = res.GetResponseStream()
Dim streamReader = New StreamReader(responseStream)
Dim soapResonseXmlDocument = New XmlDocument()
soapResonseXmlDocument.LoadXml(streamReader.ReadToEnd())
soapResonseXmlDocument.Save(AppDomain.CurrentDomain.BaseDirectory & "ItemTrackingDetailsRes.xml")