[ASP & SOAP] array of Strings

Pagina: 1
Acties:

  • majornono
  • Registratie: Juni 2002
  • Laatst online: 04-04 23:16
Ik heb een Delphi SOAP service geschreven met een functie getUrl2, die als output een array van strings teruggeeft, zie hier de swdl-file.
Nu wil ik deze service in ASP gebruiken. Ik heb hiervoor de volgende code (gedeeltelijk, hier de complete file):
ASP:
1
2
3
4
5
6
7
Dim c, i
c = SoapClient.GetUrl2

for i = 0 to Ubound(c)-1
    Response.Write c(i) &"<br>"
    i = i+1
next    

Als ik vervolgens de pagina bekijk, krijg ik een foutmelding op regel 5, dat deze operatie niet toegestaan is. Vreemd. Hij kent wel de Ubound van de array en als ik deze afdruk krijgt hij wel de goede grootte terug, maar een array van strings kent hij blijkbaar niet?
Weet iemand wat ik fout doe, ik heb het idee dat ASP dus geen array van strings kan krijgen van een SOAP service :(

Problem Exists Between Chair And Keyboard


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 11:55

Crazy D

I think we should take a look.

i = i + 1 is overbodig, de for loop zorgt daar zelf wel voor. Als ie Ubound(c) wel goed doet, zou ik m zo snel ook niet weten. In combinatie met SOAP weet ik het niet, maar ik heb wel vaker een ActiveX dll gebruikt die een array van strings teruggeeft. Misschien bestaat array item 0 niet? (hoewel dat imho wel raar zou zijn, maar dat zou mn eerste gedachte zijn...)

Exact expert nodig?


  • pasz
  • Registratie: Februari 2000
  • Laatst online: 16-08 23:04
wat gebeurt er als je een for/each constructie gebruikt ?
dus :
code:
1
2
3
4
Dim whatever
  for each whatever in SoapClient.GetUrl2
    Response.write whatever & "<br>"
  next

woei!


  • majornono
  • Registratie: Juni 2002
  • Laatst online: 04-04 23:16
i = i + 1 had ik er idd al uitgehaald, daar ligt het niet aan.

De for each constructie van PaszWerken leek een plausibele oplossing, maar ook dit blijft de fout geven:"typen komen niet overeen".

Crazy D, waar heb je de ActiveX dll en de asp file die hem gebruikt in geschreven? Ik denk dat het te maken zou kunnen hebben met het feit dat mijn exe geschreven is in Delphi en niet in VB, terwijl de client wel helemaal van MS is.
Ik ga ff proberen de service in VB te schrijven, kijken of dat werkt.

Problem Exists Between Chair And Keyboard


  • risr
  • Registratie: Juli 2002
  • Laatst online: 14-07 10:19
majornono schreef op 13 January 2003 @ 15:54:

[...]

Ik denk dat het te maken zou kunnen hebben met het feit dat mijn exe geschreven is in Delphi en niet in VB, terwijl de client wel helemaal van MS is.
Ik ga ff proberen de service in VB te schrijven, kijken of dat werkt.
Dat lijkt mij niet. SOAP is een grammatica voor XML en nota bena een standaard.

ASP:
1
Response.Write CStr(c(0))


Wat krijg je dan?

[ Voor 11% gewijzigd door risr op 13-01-2003 17:13 ]


  • majornono
  • Registratie: Juni 2002
  • Laatst online: 04-04 23:16
risr schreef op 13 January 2003 @ 17:08:
[...]


Dat lijkt mij niet. SOAP is een grammatica voor XML en nota bena een standaard.

ASP:
1
Response.Write CStr(c(0))


Wat krijg je dan?
We weten inmiddels allemaal wat Microsoft met Standaarden doet }). Als ik bovenstaande probeer krijg ik weer dezelfde foutmelding:
code:
1
typen komen niet overeen.

Deze had ik idd ook al geprobeerd.

Problem Exists Between Chair And Keyboard


  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 11:37

Rhapsody

In Metal We Trust

code:
1
Dim c, i



moet dat niet:

code:
1
Dim c(), i


zijn?

🇪🇺 pro Europa!


  • risr
  • Registratie: Juli 2002
  • Laatst online: 14-07 10:19
Of:

ASP:
1
Dim c(len(SoapClient.GetUrl2)) 'oid

  • majornono
  • Registratie: Juni 2002
  • Laatst online: 04-04 23:16
de array anders definieren werkt niet.
Ik heb hiervoor een voorbeeld uitgewerkt waarbij een SOAP service twee arrays bij elkaar optelt en deze weer terug stuurt als een enkele array. Dat voorbeeld werkte alleen als ik de C als gewone var (=variant type) definieer en niet vastzet als array
- met dim c() -

Problem Exists Between Chair And Keyboard


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 11:55

Crazy D

I think we should take a look.

majornono schreef op 13 januari 2003 @ 15:54:
Crazy D, waar heb je de ActiveX dll en de asp file die hem gebruikt in geschreven? Ik denk dat het te maken zou kunnen hebben met het feit dat mijn exe geschreven is in Delphi en niet in VB, terwijl de client wel helemaal van MS is.
Ik ga ff proberen de service in VB te schrijven, kijken of dat werkt.
Die dll had ik idd in VB geschreven (en de asp pagina in VBscript), dat zou kunnen schelen.
Blijft het raar dat Ubound een juiste waarde geeft, beetje overbodig maar ik neem aan dat IsArray(c) een True opleverd?
Mijn Delphi is net zo goed als mijn Swahiti's (:P), in VB (6) kun je als return type een Variant maken, of een String() (string array dus), heb je die keuze ook in Delphi en zo ja, wat heb je er van gemaakt?

Exact expert nodig?


  • majornono
  • Registratie: Juni 2002
  • Laatst online: 04-04 23:16
Het werd nog erger Crazy D,
ASP:
1
2
Response.Write IsArray (c)
Response.Write TypeName(c)

geeft true en "array of strings" als return.
Maar ik heb inmiddels na twee dagen met twee man zoeken de oplossing gevonden!!!!
In de wsdl is de array gedefinieerd als een array van strings. Deze hebben we veranderd in een array van anytype, en ASP kan er keurig mee omgaan:
XML:
1
2
3
4
<xs:restriction base="soapenc:Array">
  <xs:sequence /> 
  <xs:attribute ref="soapenc:arrayType" n1:arrayType="xs:string[]" xmlns:n1="http://schemas.xmlsoap.org/wsdl/" /> 
</xs:restriction>

wordt:
XML:
1
2
3
4
<xs:restriction base="soapenc:Array">
  <xs:sequence /> 
  <xs:attribute ref="soapenc:arrayType" n1:arrayType="xs:AnyType[]" xmlns:n1="http://schemas.xmlsoap.org/wsdl/" /> 
</xs:restriction>

Dus: geen exotische typen definieren en er anytype van maken, dan kan je keurig arrays en strings teruggeven. :(

Bedankt Crazy

Problem Exists Between Chair And Keyboard

Pagina: 1