I have created one web service in php which returns me data in multidimensional array, but the problem is how to consume it in .net. I know to consume web service which return data in one dimensional arrays but don't know about multidimensional array, I have included code below please help me
server side php file
<?php
require_once('lib/nusoap.php');
$server = new soap_server();
$server->configureWSDL('servCarRent', 'urn:servCarRent');
$server->wsdl->addComplexType('getAllKeyData','complexType','array','all','',
array(
'KeyId'=> array('name'=>'KeyId', 'type' =>'xsd:int'),
'KeyName'=> array('name'=>'KeyName', 'type' =>'xsd:string'),
'IsAvailable'=> array('name'=>'IsAvailable', 'type' =>'xsd:int'),
'NoOfKeys'=> array('name'=>'NoOfKeys', 'type' =>'xsd:int')
)
);
$server->wsdl->addComplexType(
'MySoapObjectArray',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:getAllKeyData[]')),
'tns:getAllKeyData'
);
$server->register(
'getAllKeys',
array(),
array('return'=>'tns:MySoapObjectArray'),
$ns,
false,
'rpc',
false,
'Processes an array of MySoapObjects and returns one of them');
function getAllKeys()
{
$con=mysql_connect('localhost','root','pass')or die("cannot connect");
mysql_select_db('mydb')or die("cannot select db");
$sql = 'Select * from KeyTable';
$result=mysql_query($sql,$con);
$out=array();
while($row = mysql_fetch_assoc($result))
{
$out[]=$row;
}
return $out;
}
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
exit();
?>
client side php file
<?php
require_once('lib/nusoap.php');
$client = new nusoap_client('http://www.mydomainname.com/new/servCarRent.php?wsdl');
$err = $client->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}
$response = $client->call('getAllKeys');
if($client->fault)
{
echo '<h2>Fault</h2><pre>';
echo '</pre>';
}
else
{
$err = $client->getError();
if ($err) {
echo '<h2>Error</h2><pre>' . $err . '</pre>';
}
else
{
echo '<h2>Result</h2><pre>';
print_r($response);
echo '</pre>';
}
}
?>
if I run client side file then i can access data, shown as below
Result
Array
(
[0] => Array
(
[0] => 1
[1] => 20577369Y
[2] => 1
[3] => 2
)
[1] => Array
(
[0] => 2
[1] => 63337921S
[2] => 1
[3] => 2
)
)
but i want to access it in .net, I have included web reference in my .net project and named it as webSerCarRent , i have tried like as follows but giving me error in XML document
webSerCarRent.servCarRent scr = new webSerCarRent.servCarRent();
webSerCarRent.getAllKeyData[] gakd = new webSerCarRent.getAllKeyData[10];
gakd = scr.getAllKeys();
for (int i = 0; i < gakd.Length; i++)
{
string kname = gakd[i].KeyName;
}
please help me
friends I got the solution and now its working fine. I just made changes in server side php file where i replaced
$server->wsdl->addComplexType('getAllKeyData','complexType','array','all','',
array(
'KeyId'=> array('name'=>'KeyId', 'type' =>'xsd:int'),
'KeyName'=> array('name'=>'KeyName', 'type' =>'xsd:string'),
'IsAvailable'=> array('name'=>'IsAvailable', 'type' =>'xsd:int'),
'NoOfKeys'=> array('name'=>'NoOfKeys', 'type' =>'xsd:int')
)
);
with
$server->wsdl->addComplexType('getAllKeyData','complexType','struct','all','',
array(
'KeyId'=> array('name'=>'KeyId', 'type' =>'xsd:int'),
'KeyName'=> array('name'=>'KeyName', 'type' =>'xsd:string'),
'IsAvailable'=> array('name'=>'IsAvailable', 'type' =>'xsd:int'),
'NoOfKeys'=> array('name'=>'NoOfKeys', 'type' =>'xsd:int')
)
);
and while accessing it in .net file there was a error, error free code in .net file is as follows
webSerCarRent.servCarRent scr = new webSerCarRent.servCarRent();
webSerCarRent.getAllKeyData[] gakd = new webSerCarRent.getAllKeyData[10];
for (int i = 0; i < gakd.Length; i++)
{
gakd[i] = scr.getAllKeys()[i];
int id = gakd[i].KeyId;
string kname = gakd[i].KeyName;
}
and its working ... :)