Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

SOAP server benaderen met nuSoap

Pagina: 1
Acties:
  • 1.812 views sinds 30-01-2008
  • Reageer

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Hallo tweakers, ben al een paar dagen bezig om met SOAP een server te benaderen en een respons eruit te trekken, maar geen geluk. Dus daarom roep ik de hulp van jullie in.

Wat is het geval..
er is een reserveringsprogramma geschreven in delphi. waarmee reservaties gedaan kunnen worden.
hiervoor is een SOAP server geschreven zodat er via internet wat gegevens uit de applicatie opgevraagd kunnen worden alvorens een reservatie kan plaats vinden.

de programmeur van het programma heeft een SOAP client (exe) meegeleverd waarmee je gegevens even vlug kan invoeren en opvragen. Deze werkt.

Nu moet ik de online versie van de client maken en dat wil dus niet lukken. Ik werk lokaal en gebruik EasyPHP 1.8, PHP 4 in de extensie modules staat de soap extensie uit en kan deze niet aanvinken.
ik gebruik NuSOAP om de soap request uit te voeren. zoals je misschien aan mijn uitleg merkt ben ik geen expert op het gebied van SOAP, maar ik doe me best

ik heb de volgende code gebruikt om te debuggen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
    require('inc/nusoap/nusoap.php');

    $client     = new soapclient('http://localhost:1024');
    $result     = $client->call('HelloWorld0Request');

    //$result   = $client->call('HelloWorld0Request');

    echo '<h2>Request</h2>';
    echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
    echo '<h2>Response</h2>';
    echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
    echo '<h2>Result</h2>';
    print_r($result);


en geeft het volgende resultaat, maar ik snap er niets van.. ik verwacht namelijk: "This answer is created by...", maar er gebeurt dus niets eigenlijk niets en weet niet hoe ik verder kan debuggen, problemen op kan lossen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Request
POST  HTTP/1.0
Host: localhost:1024
User-Agent: NuSOAP/0.7.3 (1.114)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: ""
Content-Length: 486

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns7443:HelloWorld0Request xmlns:ns7443="http://tempuri.org"></ns7443:HelloWorld0Request></SOAP-ENV:Body></SOAP-ENV:Envelope>
Response
HTTP/1.1 200 OK
Connection: close
Content-Type: text/html
Server: Indy/9.00.10


dus wie schopt mij de goede richting op?

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
volgens mij moet je wat meer variabelen meegeven.. zie hiervoor de soapdocumentatie...

zoiets heb ik bijv. laatst voor iemand gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
$client = new soapclient('https://bladibla/webservice.asmx?wsdl', true);
$err = $client->getError();
if ($err) {
    echo $err;
}

$param = array('ParameterA' => '3424232', 'ParameterB' => 'Test');

$result = $client->call('HelloWorldOfRequest', array('parameters' => $param), '', '', false, true);

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 28-11 21:46

--MeAngry--

aka Qonstrukt

Weet je zeker dat "http://localhost:1024" de WSDL teruggeeft en niet gewoon een willekeurige webpagina? Kijk eens wat je browser teruggeeft als je naar die URL gaat, je hoort dan een XML-uitvoer te zien.

Verder begrijp ik niet waarom je de call functie gebruikt, volgens PhpED (ook van Nusphere) is dat deprecated en dien je eerst een proxy aan te maken van waaruit je alle functies native aan kunt roepen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
// instantiate the SOAP client object
$soap = new soapclient($wsdl,"wsdl");

// get the SOAP proxy object, which allows you to call the methods directly
$proxy = $soap->getProxy();

// set parameter parameters (retrieveTrips^)
$parameters = array('param1' => 'bla', 'param2' => 'bli');

// get the result, a native PHP type, such as an array or string
$result = $proxy->deSOAPFunctie($parameters);


[edit]
Ik zie nu dat je PHP 4 gebruikt, daarin is het maken van een proxy met NoSOAP waarschijnlijk niet mogelijk. Kun je niet upgraden naar PHP 5? Ik zou niet weten waarom je nog met die oude muk zou willen werken. :P

[ Voor 11% gewijzigd door --MeAngry-- op 16-11-2007 12:24 ]

Tesla Model Y RWD (2024)


  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Nou als ik de bijhorende XML bekijk, waarin alle requests worden gedefinieerd, staan er geen extra variabelen bij "HelloWorld0Request". Terwijl bijvoorbeeld bij "Get_Res_Kinds2Request" daar weer wel vars bij staan die je moet meegeven.

Of heb ik het nu helemaal verkeerd?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  <message name="HelloWorld0Request" /> 
- <message name="HelloWorld0Response">
  <part name="return" type="xs:string" /> 
  </message>
- <message name="Get_Persons_Per_Unit1Request">
  <part name="LocationData" type="ns1:TLocationData" /> 
  </message>
- <message name="Get_Persons_Per_Unit1Response">
  <part name="return" type="xs:int" /> 
  </message>
- <message name="Get_Res_Kinds2Request">
  <part name="LocationData" type="ns1:TLocationData" /> 
  <part name="ResDate" type="xs:dateTime" /> 
  <part name="StartTime" type="xs:dateTime" /> 
  <part name="Duration" type="xs:dateTime" /> 
  </message>

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
--MeAngry-- schreef op vrijdag 16 november 2007 @ 12:23:
Weet je zeker dat "http://localhost:1024" de WSDL teruggeeft en niet gewoon een willekeurige webpagina? Kijk eens wat je browser teruggeeft als je naar die URL gaat, je hoort dan een XML-uitvoer te zien.
ja hierin heb je gelijk, ik heb een url waar ik die xml kan opvragen idd. Deze heb ik nu gebruikt en bij de respone krijg ik nu de XML te zien.

upgraden naar php 5.. is een optie, maar niet 1,2,3 gedaan.. dus als het in php 4 nog even kan zou ik dat erg fijn vinden.

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

..in de extensie modules staat de soap extensie uit en kan deze niet aanvinken
Tenzij je in safe mode draait kan je de module misschien laden met dl()

On track


  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
WouZz schreef op vrijdag 16 november 2007 @ 13:11:
[...]
Tenzij je in safe mode draait kan je de module misschien laden met dl()
Safe mode staat uit.. dat ik die extensie niet aan kan zetten heeft te maken met afhankelijkheid met meerdere extensies.. tenminste dat geeft het easyphp venstertje aan.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
niet om het een of ander... maar dat wat ik laatst gemaakt hebt (en in mijn eerdere post staat) werkt wel onder PHP 4... dus misschien kun je daar wat mee proberen?

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Edwardvb schreef op vrijdag 16 november 2007 @ 13:21:
niet om het een of ander... maar dat wat ik laatst gemaakt hebt (en in mijn eerdere post staat) werkt wel onder PHP 4... dus misschien kun je daar wat mee proberen?
ik heb variabelen mee gegeven aan de request, maar geen output. Ik blijf gewoon nog even op php4 draaien

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
code?

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Ik heb gewoon onzin erbij gezet, want ik heb geen flauw idee met welke variabelen ik deze functie moet aanroepen. dat staat namelijk niet in de XML (wsdl).

maar goed de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
    require('inc/nusoap/nusoap.php');

    $client     = new soapclient('http://localhost:1024/wsdl/IMyinterface');
    $param      = array('ParameterA' => '12345', 'ParameterB' => 'Test'); 
    $result     = $client->call('HelloWorldOfRequest', array('parameters' => $param), '', '', false, true); 

    echo '<h2>Request</h2>';
    echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
    echo '<h2>Response</h2>';
    echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
    echo '<h2>Result</h2>';
    print_r($result);

Verwijderd

Die Delphi SOAPserver is blijkbaar geschreven met de Indy internet library van Chad (Kudzu) Hower.
Default haal je daarmee de wsdl op met: http://localhost:1024/wsdl/<naam webservice>

Achter de naam van de webservice kun je komen door http://localhost:1024/wsdl in een browser op te vragen, je krijgt dan een lijstje met services te zien die door die Indy server worden gehost. Meestal is de naam 'I' plus de naam van het Delphi project.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
WebTwister schreef op vrijdag 16 november 2007 @ 16:11:
Ik heb gewoon onzin erbij gezet, want ik heb geen flauw idee met welke variabelen ik deze functie moet aanroepen. dat staat namelijk niet in de XML (wsdl).

maar goed de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
    require('inc/nusoap/nusoap.php');

    $client     = new soapclient('http://localhost:1024/wsdl/IMyinterface');
    $param      = array('ParameterA' => '12345', 'ParameterB' => 'Test'); 
    $result     = $client->call('HelloWorldOfRequest', array('parameters' => $param), '', '', false, true); 

    echo '<h2>Request</h2>';
    echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
    echo '<h2>Response</h2>';
    echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
    echo '<h2>Result</h2>';
    print_r($result);
moet je niet bij de aanroep "new soapclient" er nog bij aangeven dat het een wsdl betreft d.m.v. een extra parameter "true":
code:
1
$client = new soapclient("http://....", true)

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
nee. zodra ik true aan de code toevoeg, gebeurt er nog minder.. het debug resultaat met de xmlcode enzo blijft dan ook weg.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
en deze URL in je adresbalk van je browser invullen geeft een WSDL document terug?
http://localhost:1024/wsdl/IMyinterface
??
mij lijkt logischer dat dit de URL is:
http://localhost:1024/wsdl

dus:
PHP:
1
$client = new soapclient("http://localhost:1024/wsdl", true);

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
[b][message=29100463,noline]Edwardvb schreef op vrijdag 16 november 2007 @ 16:36
PHP:
1
$client = new soapclient("http://localhost:1024/wsdl", true);
met deze url/code komt het volgende resultaat:
code:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Request
POST /wsdl HTTP/1.0
Host: localhost:1024
User-Agent: NuSOAP/0.7.3 (1.114)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: ""
Content-Length: 568

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><HelloWorldOfRequest><parameters><ParameterA xsi:type="xsd:string">12345</ParameterA><ParameterB xsi:type="xsd:string">Test</ParameterB></parameters></HelloWorldOfRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>
Response
HTTP/1.1 200 OK
Connection: close
Content-Type: text/html
Content-Length: 3995
Server: Indy/9.00.10

<html><head><title>SOAPServer</title></head><style type="text/css"><!--
body       {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; margin-left: 0px; margin-top: 0px; margin-right: 0px; }
h1         {color: #333333; font-size: 18pt; font-style: normal; font-weight: bold; }
h2         {color: #333333; font-size: 14pt; font-style: normal; font-weight: bold; }
h3         {color: #333333; font-size: 12pt; font-style: normal; font-weight: bold; }
.h1Style   {color: #333333; font-size: 18pt; font-style: normal; font-weight: bold; }
.TblRow    {color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: normal; }
.TblRow1   {color: #333333; background-color: #f5f5dc; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; font-weight: normal; }
.TblRow0   {color: #333333; background-color: #d9d4aa; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; font-weight: normal; }
.TblHdr    {color: #CCCC99; background-color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; text-align: center;}
.IntfName  {color: #660000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; font-weight: bold; }
.MethName  {color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 8pt; font-weight: bold; text-decoration: none; }
.ParmName  {color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 8pt; text-decoration: none; }
.Namespace {color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; font-style: italic; }
.WSDL      {color: #990000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 8pt; font-weight: bold; }
.MainBkgnd {background-color : #d9d4aa; }
.Info      {font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12pt; font-weight: bold; }
.NavBar    {color: #660000; background-color: #f5f5dc; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 8pt; font-weight: bold;text-decoration: none; }
.Off       {color: #A0A0A0; }
.Tip        {color: #666666; font-family : Verdana, Arial, Helvetica, sans-serif; font-weight : normal; font-size : 9pt; }
--></style>
<body><table class="MainBkgnd" border=0 cellpadding=0 cellspacing=0 width="100%"><tr><td>&nbsp;</td></tr><tr><td class="h1Style" align="center">SOAPServer - WebService Listing</td></tr></table>
<center><br>
<table border=1 cellspacing=1 cellpadding=2 >
<tr>
<td class="TblHdr">Port Type</td>
<td class="TblHdr">Namespace URI</td>
<td class="TblHdr">Documentation</td>
<td class="TblHdr">WSDL</td>
</tr>
<tr>
<td class="TblRow">IMyInterface</td>
<td class="TblRow">urn:uIntf-IMyInterface</td>
<td class="TblRow">&nbsp;</td>
<td class="TblRow"><a href="http://localhost:1024/wsdl/IMyInterface">IMyInterface</a></td>
</tr>
<tr>
<td class="TblRow">IAppServer</td>
<td class="TblRow">urn:Midas-IAppServer</td>
<td class="TblRow">&nbsp;</td>
<td class="TblRow"><a href="http://localhost:1024/wsdl/IAppServer">IAppServer</a></td>
</tr>
<tr>
<td class="TblRow">IAppServerSOAP</td>
<td class="TblRow">http://www.borland.com/namespaces/Types</td>
<td class="TblRow">&nbsp;</td>
<td class="TblRow"><a href="http://localhost:1024/wsdl/IAppServerSOAP">IAppServerSOAP</a></td>
</tr>
<tr>
<td class="TblRow">IMySOAPDM</td>
<td class="TblRow">urn:uSOAPDM-IMySOAPDM</td>
<td class="TblRow">&nbsp;</td>
<td class="TblRow"><a href="http://localhost:1024/wsdl/IMySOAPDM">IMySOAPDM</a></td>
</tr>
<tr>
<td class="TblRow">IWSDLPublish</td>
<td class="TblRow">http://www.borland.com/namespaces/Types</td>
<td class="TblRow">Lists all the PortTypes published by this Service</td>
<td class="TblRow"><a href="http://localhost:1024/wsdl/IWSDLPublish">IWSDLPublish</a></td>
</tr>
</table>
<FORM NAME="admin" METHOD="GET" ACTION="http://localhost:1024/wsdl/admin">
<INPUT TYPE="SUBMIT" VALUE="Administrator">
</FORM>
</center>
</body></html>

Result


en met deze url/code:
$client = new soapclient('http://localhost:1024/wsdl/IMyinterface
code:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Request
POST /wsdl/IMyinterface HTTP/1.0
Host: localhost:1024
User-Agent: NuSOAP/0.7.3 (1.114)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: ""
Content-Length: 568

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><HelloWorldOfRequest><parameters><ParameterA xsi:type="xsd:string">12345</ParameterA><ParameterB xsi:type="xsd:string">Test</ParameterB></parameters></HelloWorldOfRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>
Response
HTTP/1.1 200 OK
Connection: close
Content-Type: text/xml
Content-Length: 21112
Server: Indy/9.00.10

<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="IMyInterfaceservice" targetNamespace="ezres_wsdl" xmlns:tns="ezres_wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:ns1="urn:uIntf">
  <types>
    <xs:schema targetNamespace="urn:uIntf" xmlns="urn:uIntf">
      <xs:complexType name="TLocationData">
        <xs:sequence>
          <xs:element name="Databasename" type="xs:string"/>
          <xs:element name="MainAcco" type="xs:int"/>
          <xs:element name="SubAcco" type="xs:int"/>
        </xs:sequence>
      </xs:complexType>
      <xs:complexType name="ArrayOfReservationKind">
        <xs:complexContent>
          <xs:restriction base="soapenc:Array">
            <xs:sequence/>
            <xs:attribute ref="soapenc:arrayType" n1:arrayType="ns1:TReservationKind[]" xmlns:n1="http://schemas.xmlsoap.org/wsdl/"/>
          </xs:restriction>
        </xs:complexContent>
      </xs:complexType>
      <xs:complexType name="TReservationKind">
        <xs:sequence>
          <xs:element name="res_type_num" type="xs:int"/>
          <xs:element name="name" type="xs:string"/>
          <xs:element name="price1" type="xs:double"/>
          <xs:element name="price2" type="xs:double"/>
          <xs:element name="price_unit" type="xs:int"/>
          <xs:element name="price_sw_time" type="xs:string"/>

en dat gaat nog wel even door..

  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
Oke beste tweakers, het weekend is voorbij en ben nog geen steek verder.
Is er nog iemand met ideeën of tips?

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 27-11 21:33

thomaske

» » » » » »

De tweede response die je krijgt is voor zover ik kan zien de WSDL. Hierin staan alle requests en responses beschreven met hun argumenten. Kan je daar niet uithalen welke parameters je precies nodig hebt?

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • WebTwister
  • Registratie: November 2001
  • Laatst online: 27-08-2024
thomaske schreef op maandag 19 november 2007 @ 10:34:
De tweede response die je krijgt is voor zover ik kan zien de WSDL. Hierin staan alle requests en responses beschreven met hun argumenten. Kan je daar niet uithalen welke parameters je precies nodig hebt?
ja, dat dacht ik ook.. dus bij de eerste request "HelloWorld0Request" .. (ofzo) hoeft naar mijn weten geen parameters worden meegegeven.. dus die roep ik aan, maar krijg geen response.

dus misschien kan iemand me vertellen wat ik verkeerd doe?

[ Voor 0% gewijzigd door WebTwister op 19-11-2007 12:26 . Reden: spelfout ]


  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 28-11 21:46

--MeAngry--

aka Qonstrukt

Zit het probleem niet aan de zendende kant? Ik weet niet of het een functie betreft welke incrementeel dingetjes teruggeeft, maar kan het zijn dat de functie gewoon niets meer teruggeeft?

Verder hoef je jezelf niet druk te maken over het meegeven van parameters, want dat lijkt inderdaad niet te hoeven. Daar kun je dus gewoon een lege array aan meegeven.

Verder zou ik de NuSOAP manual nog eens goed doorlezen om te kijken of je alles wel op de goede manier doet, en of je geen benodigde extensie mist. (Heb je display_errors op on staan, en error_reporting op E_ALL?)
Ik heb alleen ervaring met de PHP 5 versie helaas, dus ik kan je er ook niet echt veel verder mee helpen.

Tesla Model Y RWD (2024)

Pagina: 1