1

我正在传递一个在 nusoap 服务器端定义的复杂对象。在将 web 服务添加到我的 c# 客户端后,我能够声明和访问在 nusoap 服务器端声明的对象的所有区域。如下所示。

public void sendArrayOfMHObjects()
    {
        //Steps: Create WS Instance, then create send and recieve objects defined on WS end
        masterH.mhserver mh = new masterH.mhserver();
        masterH.HarvestObject objRequest = new masterH.HarvestObject();
        masterH.ResponseObject objResponse = new masterH.ResponseObject();

        masterH.Stuffs[] stuffsArray = new masterH.Stuffs[2];

     //   stuffsArray[0].id = 4;

        //Populate and request Object 
        objRequest.responseCode = 34;  
        objRequest.responseMessage = "Whats up docs";


        masterH.Stuffs arrayObject = new masterH.Stuffs();
        arrayObject.id = 6;
         arrayObject.name = "John";

          masterH.Stuffs arrayObject2 = new masterH.Stuffs();
        arrayObject2.id = 7;
         arrayObject2.name = "Johnny boy";

         stuffsArray[0] = arrayObject;
         stuffsArray[1] = arrayObject2;

         objRequest.stuffArray =stuffsArray;


        //Pick up response and display it
        objResponse = mh.sendHarvest(objRequest);

        Console.WriteLine("---------------------------------------------------------------------------");
        Console.WriteLine("Response Code: " + objResponse.responseCode);
        Console.WriteLine("Response Message: " + objResponse.responseMessage);
        Console.WriteLine("---------------------------------------------------------------------------");
        Console.WriteLine("---------------------------------------------------------------------------");

    }

我可以验证数据是否正在到达 php webservice,因为我有一个响应对象被遍历以验证数据是否存在于 c# 客户端。我遇到的问题是当对象到达时我无法访问 php 端的数组对象。这就是我在 php 端所拥有的: $server = new soap_server(); $server->configureWSDL("mh-server", "urn:mh-server");

class ResponseObject {
    public $responseCode = -1;
    public $responseMessage = 'Unknown error!';
//    public $stuffArray = NULL;
}   

class HarvestObject {
public $responseCode = -1;
public $responseMessage = 'Unknown error!';
public $stuffArray = NULL;
}   


class StuffsArray {
public $stuffs = NULL;
}  


class Stuffs{
public $id = 23;
public $name = "Larry";
}  

$myNamespace = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];


$server->register("getStuffs", array(), 
array('return' => 'tns:ResponseObject'),$myNamespace,  $myNamespace."#getStuffs",
'rpc',  'encoded', 'Fetch array of Stuffs.'
);                                                          


$server->register("sendStuffs", array('TheList' => 'tns:ResponseObject'),   array('return' => 'tns:ResponseObject'), $myNamespace, 

$myNamespace."#sendStuffs",'rpc', 'encoded', 
'Send array of Stuffs.'
);                                                                      


$server->register("sendHarvest", array('HarvestData' => 'tns:HarvestObject'), array('return' => 'tns:ResponseObject'), $myNamespace, 
$myNamespace."#sendHarvest",    'rpc', 'encoded', 'Send Harvest Object.'
);                                                                      



////////////////////////////////////////////////////WEBSERVICE    
STRUCTURES////////////////////////////////////////////////////////////////              

////////Response Structure////////////
$server->wsdl->addComplexType('ResponseObject',  'complexType', 'struct', 'all',  '', 
array('responseCode' => array('type' => 'xsd:int'), 
'responseMessage' => array(     'type' => 'xsd:string')
         )  );              

////////Request Structures////////////////////
$server->wsdl->addComplexType('HarvestObject',  'complexType', 
'struct', 'all',  '',   array('responseCode' => array('type' => 'xsd:int'),
'responseMessage' => array(   'type' => 'xsd:string'), 
'stuffArray'   => array(     'type' => 'tns:StuffsArray' ) )  );                

$server->wsdl->addComplexType('StuffsArray', 'complexType', 'array',
'','SOAP-   ENC:Array', array(), array( array('ref' => 'SOAP-ENC:arrayType',
'wsdl:arrayType' => 'tns:Stuffs[]' ) ),'tns:Stuffs'  );         

$server->wsdl->addComplexType('Stuffs','complexType','struct','all','', 
array( 'id' =>   array('name' => 'id', 'type' => 'xsd:int'),
'name' => array('name' => 'name', 'type' => 'xsd:string') )  );  






$server->service(isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '');

///////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// ///////////////////

function sendHarvest($harvestTemp) {

$harvestObject= new HarvestObject();
$harvestObject= $harvestTemp;
$harvestArray = array();
$harvestArray=$harvestObject->stuffArray;

$harvestItems = new Stuffs();

$responseObject = new ResponseObject();
$responseObject->responseCode=0;
$responseObject->responseMessage= $tempID.$tempName;    


return $responseObject;
}

在这一点上,我已经尝试了几乎所有东西,我得到的最后一个响应是当我尝试用我想要提取的元素构建一个连接字符串时返回一个空值。我从传入的对象数组中需要的项目是 id 和 name 值。可以的话请帮忙谢谢。

4

0 回答 0