Dobrý den, nevím, zda to sem patří, ale přesto rád bych požádal o radu. Jsem začátečník a nevím, kde jinde to zkusit... Heldal jsem hodně na internetu, ale nenašel (neuměl najít). Mám webovou službu (konkrétně metodu/operaci GetSports) a chci z ní vrátit strukturovaná data (např. seznam sportovišť a jejich názvů, kapacity, ceny atd). Z tabulky mi vrátí správný počet řádků, ale jen hodnotu z 1. sloupce. Totéž je pro tabulku v datasetu + výsledné XML neodpovídá tomu, jaký formát má XML u zákazníka. Proto jsem udělal vrácení typu List(Of Sport), kde Sport je třída s vlastnostmi Název, Kapacita atd. jenže ani výsledné WSDL neobsahuje strukturu výstupu, ani výsledek (např. SoapUI) nevrací tudíž žádná data. Prosím odborníky o jakoukoliv radu! Případně z požadovaného XML nejspíš zjistíte, zda použít ještě jiný způsob vrácení. Zde je celý program, za ním požadované XML zákazníka:
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
' <System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class Service1
'** Seznam činností (sportovišť) k objektu (areálu) - parent = id and type = 3
<WebMethod()> _
Public Function getSports(ByVal objectId As Integer) As List(Of Sport)
Dim xit_db_data As DataTable = New DataTable
Dim x_db_row As DataRow
Dim xit_data As DataTable = New DataTable("DATA")
Dim x_row As DataRow
Dim xstr As String = ""
Dim xselect As String = ""
Dim DS As DataSet = New DataSet("ResponseX")
'* Připojení DB
...
'* Naplnit výstupní tab.:
Dim xRet As New List(Of Sport)()
For Each x_db_row In xit_db_data.Rows
Dim xx As New Sport()
xx.AddSport(x_db_row("id"), 10, x_db_row("descr"), True, 1)
xret.Add(xx)
Next
DS.Tables.Add(xit_data)
Return xRet
'Return DS
End Function
End Class
'** Struktura 1 sportu (pro getSports)
Public Class Sport
Private _id As String
Private _lengthOfMajorReservation As Int16
Private _name As String
Private _tariffForPerson As Boolean
Private _unitOfTariff As Int16
Public Sub New()
End Sub
Public Sub AddSport(ByVal id As String, ByVal lengthOfMajorReservation As Int16, _
ByVal name As String, ByVal tariffForPerson As Boolean, ByVal unitOfTariff As Int16)
Me._id = id
Me._lengthOfMajorReservation = lengthOfMajorReservation
Me._name = name
Me._tariffForPerson = tariffForPerson
Me._unitOfTariff = unitOfTariff
End Sub
Public ReadOnly Property id() As String
Get
Return Me._id
End Get
'Set(ByVal value As String)
' Me.id = value
'End Set
End Property
Public ReadOnly Property lengthOfMajorReservation() As Int16
Get
Return Me._lengthOfMajorReservation
End Get
End Property
Public ReadOnly Property name() As String
Get
Return Me._name
End Get
End Property
Public ReadOnly Property tariffForPerson() As Boolean
Get
Return Me._tariffForPerson
End Get
End Property
Public ReadOnly Property unitOfTariff() As Int16
Get
Return Me._unitOfTariff
End Get
End Property
End Class
Požadované XML zákazníka
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<getSportsResponse xmlns="http://tempuri.org/">
<getSportsResult>
<state>0</state>
<message />
<sportInfo>
<sportInfoItem>
<id>123456_123</id>
<lengthOfMajorReservation>10</lengthOfMajorReservation>
<tariffForPerson>true</tariffForPerson>
<name>Fotbal</name>
<unitOfTariff>1</unitOfTariff>
<price>790</price>
</sportInfoItem>
<sportInfoItem>
<id>123457</id>
<lengthOfMajorReservation>10</lengthOfMajorReservation>
<tariffForPerson>true</tariffForPerson>
<name>Hokej</name>
<unitOfTariff>1</unitOfTariff>
<price>1450</price>
</sportInfoItem>
<sportInfoItem>
<id>234567</id>
<lengthOfMajorReservation>10</lengthOfMajorReservation>
<tariffForPerson>true</tariffForPerson>
<name>Basket</name>
<unitOfTariff>1</unitOfTariff>
<price>750</price>
</sportInfoItem>
</sportInfo>
</getSportsResult>
</getSportsResponse>
</soap:Body>
</soap:Envelope>
|