[ASP] Webservice met complex type aanroepen

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Ik probeer m'n eigen webservice aan te roepen waar ik een bepaald complex type in moet stoppen. Dat kan met SOAP toolkit 3.0, maar ik krijg het niet aan de praat. Een custom data type mapper maken is geen optie, omdat hiervoor een ActiX DLL geregistreerd moet worden op de webserver. Gelukkig is het volgens de documentatie ook mogelijk om een IXMLDOMNodeList te gebruiken, maar dat is juist waar ik op vastloop. Ter illustratie, de code voor het aanroepen:
ASP:
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
Sub SetUserProperties(AuthenticationCode, PortletCode, Properties)
   //Nodelist opbouwen
   Dim Doc, FieldData, FieldDataValue, FieldDataName, Name
   Set Doc = Server.CreateObject("Microsoft.XMLDOM")
   Set Doc.documentElement = Doc.createElement("Properties")
   For Each Name In Properties.Keys
      Set FieldData = Doc.createElement("FieldData")
      Set FieldDataName = Doc.createAttribute("Name")
      FieldDataName.text = Name
      FieldData.attributes.setNamedItem(FieldDataName)
      Set FieldDataValue = Doc.createElement("Value")
      FieldDataValue.text = Properties.Item(Name)
      FieldData.appendChild(FieldDataValue)
      Doc.documentElement.appendChild(FieldData)
   Next
   
   //Webservice aanroepen
   Dim Soap
   Set Soap = SoapAuthentication
   Soap.SetUserProperties
      AuthenticationCode,
      PortletCode,
      Doc.documentElement.childNodes
   
   //Opruimen
   Set Soap = Nothing
   Set Doc = Nothing
End Sub

Dat object "Soap" is prima, SoapAuthentication is gewoon een functie die een SoapClient maakt en initialiseert met een WSDL. Ook de XML die gegenereerd wordt uit de regels die erboven staan, is correct, dus dat is het zeker niet. Ook is Doc.documentElement.childNodes echt van het type IXMLDOMNodeList, volgens de TypeName() functie.

Het probleem is meer dat bij de aanroep van de SetUserProperties methode, ik de volgende fout krijg:
code:
1
Typen komen niet met elkaar overeen: 'Soap.SetUserProperties'

En daarom gok ik dus dat hij niet snapt dat ik er een IXMLDOMNodeList in stop. Ik heb al geprobeerd Doc en Doc.documentElement mee te sturen, maar hij blijft die cryptische foutmeldig geven...

Wat oh wat doe ik toch fout?

日本!🎌


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

code:
1
Set Soap = SoapAuthentication

moet denk ik
code:
1
Set Soap = new SoapAuthentication

zijn, of met createObject. Het lijkt er nu op dat Soap niet goed wordt aangemaakt als object ;)

kaart != map && bottel != fles
Wacht op antwoord


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Ik zei toch dat het een functie is die een SoapClient teruggeeft...

日本!🎌


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

_Thanatos_ schreef op 29 oktober 2004 @ 13:51:
Ik zei toch dat het een functie is die een SoapClient teruggeeft...
overheen gelezen idd :/

kan het zijn dat de functie er dan zo uitziet:
code:
1
2
3
4
function SoapAuthentication()
   ...
   SoapAuthentication = object
end function


ipv
code:
1
2
3
4
function SoapAuthentication()
   ...
   set SoapAuthentication = object
end function


(laat die functie eens zien, ik denk nogsteeds dat de variabele soap niet goed als object aan wordt gemaakt)


of moet er soms ipv :
code:
1
2
3
4
Soap.SetUserProperties
      AuthenticationCode,
      PortletCode,
      Doc.documentElement.childNodes

dit staan:

code:
1
2
3
4
Soap.SetUserProperties _
      AuthenticationCode, _
      PortletCode, _
      Doc.documentElement.childNodes

(underscores om aan te geven dat je op volgende regel verder gaat dus)

kaart != map && bottel != fles
Wacht op antwoord


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Topicstarter
Nee, die functie is echt wel goed, want andere methodes met die SoapClient werken wel goed. En Ja, die underscores hadden erbij gemoeten, maar denk je dan echt dat ie een runtime fout gaat geven? Nee, dan krijg je een compilerfout. In m'n echte code staan die call op 1 regel, heb het hier alleen voor de leesbaarheid ff afgebroken.

Maar anyway, persistent als je bent:
ASP:
1
2
3
4
5
6
7
Function SoapAuthentication
   Dim Soap   
   Set Soap = Server.CreateObject("MSSOAP.SoapClient")
   Soap.ClientProperty("ServerHTTPRequest") = True
   Soap.mssoapinit("http://thany/TWS/Authentication.asmx?WSDL")
   Set SoapAuthentication = Soap
End Function

En ja, de URL klopt wel, wil je de WSDL ook nog zien?

/edit
Ik heb het al op een andere manier gedaan (het moet toch gaan werken), gewoon met een SoapSerializer de boel opbouwen. En dat lijkt goed te gaan. Maar met de SoapClient hoort het ook gewoon te kunnen, dus als iemand nog iets weet...

[ Voor 60% gewijzigd door _Thanatos_ op 29-10-2004 16:05 ]

日本!🎌