2013-07-01 2 views
0

PHP에서 다차원 배열로 데이터를 반환하는 웹 서비스를 만들었지 만 문제는 .net에서 사용하는 방법입니다. 내가 1 개 차원 배열에 데이터를 반환하지만, 다차원 배열 모르는 웹 서비스를 소비 알고, 나는 아래 코드는 나에게.net에서 다차원 배열을 반환하는 PHP webservice를 사용하는 방법

서버 측 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 프로젝트에서 웹 참조를 포함 webSerCarRent로 명명 한 그물에 액세스하려면, 내가

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

을 XML 문서 나에게 오류를 제공 제외한 다음과 같은 시도하십시오 도와주세요

답변

1

친구 나는 해결책을 얻었으나 현재는 잘 작동한다. 다음과 같이 난 그냥 내가

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

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

대체 어디 서버 측 PHP 파일에서 변경 한 및 .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; 

} 

과 작업

... :)