Question

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

Was it helpful?

Solution

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 ... :)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top