0

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

1 Answer 1

1

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.