简体   繁体   中英

Unable To Show Data in PHP Using ASP.NET Web Service

I've created a simple web service in ASP.NET and want that service to be consumed in a PHP application. The web service is as follows:

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public List<Customer> GetCustomers(int id)
{
   id = Convert.ToInt32(HttpContext.Current.Request.QueryString["id"]);

   List<Customer> lst = null;
   using (var context = new DemoEntities())
   {
      lst = (from c in context.Customer
             where c.CustomerID == id
             select c).ToList();
   }

   return lst;
}

In the above web service, a customer id is passed to retrieve customer details. So to consume this service in PHP , I've tried to do the following using nuSoap library as follows and it works almost:

<?php
    require_once("lib/nusoap.php"); //Using the nuSoap library

    $client   = new nuSoap_Client('http://localhost:1284/MyCustomers.asmx?wsdl', TRUE); //Passed the ASP.NET web service and an object created
    $result = $client->call('GetCustomers', array('id' => 1)); //Called the GetCustomers method and passed a default parameter

    foreach($result as $item) //Tried to iterate in a foreach loop
    {
      echo $item; //Here is the issue - The output returns or returned only the name 'Array'  
    }
?>

I've done PHP programming a long time ago and trying to figure the issue searching google. I've even tried to access the array index with the web service property directly like the below but seems like missing something or may be not the correct way: Any idea would be appreciated

echo $item[1]->CustName;
echo $item[1]; //Even this 

Right now, I am getting the Xml data as follows using the Soap web service:

<ArrayOfCustomer>
  <Customer>
    <CustomerID>2</CustomerID>
    <CustName>John</CustName>
    <CustAddress>On Earth</CustAddress>
    <CustLocation>On Earth</CustLocation>
    <CustSex>Male</CustSex>
    <CustType>3</CustType>
    <CustStatus>2</CustStatus>
    <CustDetails>Great guy - Always regular.</CustDetails>
  </Customer>
</ArrayOfCustomer> 

Update 1 : Used var_dump($item) and currently getting the array elements as follows:

array
  'Customer' => 
    array
      'CustomerID' => string '2' (length=1)
      'CustName' => string 'John' (length=7)
      'CustAddress' => string 'On Earth' (length=25)
      'CustLocation' => string 'On Earth' (length=10)
      'CustSex' => string 'Male' (length=4)
      'CustType' => string '3' (length=1)
      'CustStatus' => string '2' (length=1)
      'CustDetails' => string 'Great guy - Always regular.' (length=47)

But when tried with this $item->Customer->CustName , getting this error again - Trying to get property of non-object .

Update 2 : Again used var_dump($item) and the result is as follows with PHP programming:

<?php
    require_once("lib/nusoap.php"); 

    $client   = new nuSoap_Client('http://localhost:1284/MyCustomers.asmx?wsdl', TRUE);
    $result = $client->call('GetAllCustomers'); //Without any parameter
    foreach($result as $item)
    {
       echo var_dump($item);
    }
?>

Output :

array
  'Customer' => 
    array
      0 => 
        array
          'CustomerID' => string '1' (length=1)
          'CustName' => string 'Jack' (length=7)
          'CustAddress' => string 'On Earth' (length=25)
          'CustLocation' => string 'On Earth' (length=10)
          'CustSex' => string 'Male' (length=4)
          'CustType' => string '3' (length=1)
          'CustStatus' => string '2' (length=1)
          'CustDetails' => string 'Regular Customer and always happy to cooperate.' (length=47)
      1 => 
        array
          'CustomerID' => string '2' (length=1)
          'CustName' => string 'John' (length=4)
          'CustAddress' => string 'On Earth' (length=7)
          'CustLocation' => string 'On Earth' (length=10)
          'CustSex' => string 'Male' (length=4)
          'CustType' => string '3' (length=1)
          'CustStatus' => string '2' (length=1)
          'CustDetails' => string 'Great guy - Always regular.' (length=25)

Again, tried to use two loops to get the values that's as follows but it only returns first two results and there are total 10 records in the database:

<?php
    require_once("lib/nusoap.php"); 

    $client   = new nuSoap_Client('http://localhost:1284/MyCustomers.asmx?wsdl', TRUE);
    $result = $client->call('GetAllCustomers');
    $count = count($result);

    foreach($result as $item)
    {
      for($i = 0; $i <= $count; $i++)
      {
         echo 'Name: ' . $item['Customer'][$i]['CustName'].'<br/>';
      } 
    }
?>

Output :

Name: Jack //Returns only first two records though it should return all the records
Name: John

Simply do a var_dump($item); in php to see how they array structure is.. currently I do not know what the response object is, but for example you can access the keys as such: echo $item->Customer->CustName;

If it is an array response, not an object, then: $item['Customer']['CustName'];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM