2013-07-01 2 views
0

Я создал одну веб-службу в php, которая возвращает мне данные в многомерном массиве, но проблема заключается в том, как ее использовать в .net. я знаю, чтобы использовать веб-службу, которые возвращают данные в одномерных массивах, но не знают о многомерном массиве, я включил ниже код, пожалуйста, помоги мнеКак использовать php webservice, которые возвращают многомерный массив в .net

стороны сервера PHP файл

<?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(); 

?> 

сторона клиента файл PHP

<?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>'; 

} 
} 

?> 

если я бегу на стороне клиента файл, то я могу получить доступ к данным, как показано ниже

Result 

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 20577369Y 
      [2] => 1 
      [3] => 2 
     ) 

    [1] => Array 
     (
      [0] => 2 
      [1] => 63337921S 
      [2] => 1 
      [3] => 2 
     ) 



) 

, но я хочу, чтобы получить доступ к нему в .net, я включил веб-ссылку на мой проект .NET и назвал его webSerCarRent, я попробовал, как следующим образом, но дает мне ошибку в документе XML

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; 
      } 

пожалуйста помогите мне

ответ

1

друзья У меня есть решение, и теперь он работает отлично. Я просто внес изменения в файл сервера на стороне PHP, где я заменил

$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('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') 
    ) 
); 

и в то время как доступ к нему в .net файла произошла ошибка, безошибочным код в .net файл выглядит следующим образом

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; 

} 

и его работы ... :)

Смежные вопросы