Ok, jeg har strikket et lille eksempel sammen. Ligger på
http://n0p.com/soap/webservice1.php med WSDL på
http://n0p.com/soap/webservice1.php?wsdlPHP koden er (ikke så pæn, men...)
<?php
header("Connection: Close");
// includes nusoap classes
require('lib/nusoap.php');
// create server
$l_oServer = new soap_server();
// wsdl generation
$l_oServer->debug_flag=false;
$l_oServer->configureWSDL('Webservice1', '
http://n0p.com/soap');
$l_oServer->wsdl->schemaTargetNamespace = '
http://n0p.com/soap'; // add complex type
$l_oServer->wsdl->addComplexType(
'personitem',
'complexType',
'struct',
'all',
'',
array(
'navn' => array('name'=>'navn', 'type'=>'xsd:string'),
'adresse' => array('name'=>'adresse', 'type'=>'xsd:string'),
'iq' => array('name'=>'iq', 'type'=>'xsd:int'))
);
$l_oServer->wsdl->addComplexType('personitems',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref'=>'SOAP-ENC:arrayType',
'wsdl:arrayType'=>'tns:personitem[]')
),
'tns:personitem'
);
// register method
$l_oServer->register('getPerson',
array('id' => 'xsd:int'),
array('return' => 'tns:personitem'),
'Webservice1',
'Webservice1#getPerson',
'rpc',
'encoded',
'Returns the data for a person'
);
$l_oServer->register('getPersons',
array('query' => 'xsd:string'),
array('return' => 'tns:personitems'),
'Webservice1',
'Webservice1#getPersons',
'rpc',
'encoded',
'Returns the data for every person'
);
// method code (get DB result)
function getPerson($id) {
return array('navn' => "Pia $id",
'adresse' => "Hovedgaden $id",
'iq' => $id
);
}
function getPersons ($antal) {
$personlist = array();
for ($i=0;$i<$antal;$i++) {
$personlist[] = array('navn' => "Pia $i", 'adresse' => "Hovedgaden $i", 'iq' => 50+$i);
}
//$persons = array('personitem' => $personlist);
return $personlist;
}
// pass incoming (posted) data
$l_oServer->service($HTTP_RAW_POST_DATA);
?>
og et lille testprogram i .NET (VB.NET) efter denne webservice er added:
Imports System.net.configuration
Imports System.configuration
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim aaa As New com.n0p.Webservice1()
Dim c As com.n0p.personitem = aaa.getPerson(33)
MessageBox.Show(c.navn & " " & c.adresse & " " & c.iq)
Dim b As com.n0p.personitem() = aaa.getPersons(8)
For i As Int32 = 0 To b.Length - 1
MessageBox.Show(b(i).navn & " " & b(i).adresse & " " & b(i).iq)
Next
End Sub
End Class
Man definerer altså de complextypes man har brug for. Og det er ikke ligetil - jeg har skrevet af fra et eller andet.