如何使用在.net中返回多维数组的php-webservice

本文关键字:数组 php-webservice 返回 何使用 net | 更新日期: 2023-09-27 18:20:28

我在php中创建了一个web服务,它以多维数组的形式返回数据,但问题是如何在.net中使用它。我知道使用在一维数组中返回数据的web服务,但不知道多维数组,我已经包含了下面的代码,请帮助我

服务器端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项目中包含了web引用,并将其命名为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;
            }

请帮我

如何使用在.net中返回多维数组的php-webservice

朋友们,我得到了解决方案,现在运行良好。我刚刚在服务器端的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;
}

及其工作…:)