2017-09-03 1 views
1

J'ai créé un service Web simple au ASP.NET et je souhaite que ce service soit utilisé dans une application PHP. Le service Web est la suivante:Impossible d'afficher les données en PHP à l'aide du service Web ASP.NET

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

Dans le service Web ci-dessus, est passé un identifiant client pour récupérer les détails du client. Donc, pour consommer ce service dans PHP, j'ai essayé de faire la bibliothèque suivante en utilisant nuSoap comme suit et il fonctionne presque:

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

Je l'ai fait PHP programmation il y a longtemps et à essayer de comprendre la question de recherche Google. J'ai même essayé d'accéder à l'index du tableau avec la propriété de service Web directement comme ci-dessous, mais il semble que manque quelque chose ou peut-être pas la bonne façon: Une idée serait appréciée

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

En ce moment, je reçois les Xml données comme suit à l'aide du savon service web:

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

Mise à jour 1: Utilisé var_dump($item) et obtenir actuellement les éléments du tableau comme suit:

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) 

Mais quand essayé avec ce $item->Customer->CustName, obtenir cette erreur encore une fois - Essayer d'obtenir la propriété de non-objet.

Mise à jour 2: Encore une fois utilisé var_dump($item) et le résultat est le suivant avec la programmation PHP:

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

Sortie:

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) 

Encore une fois, a essayé d'utiliser deux boucles pour obtenir la les valeurs sont les suivantes, mais il ne renvoie que les deux premiers résultats et il y a un total de 10 enregistrements dans la base de données:

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

Sortie:

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

Répondre

2

Il suffit de faire un var_dump($item); en php pour voir comment ils la structure du tableau est .. actuellement je ne sais pas ce que l'objet de réponse est, mais par exemple, vous pouvez accéder à la clés en tant que tels: echo $item->Customer->CustName;

Si elle est une réponse de tableau, pas un objet, puis: $item['Customer']['CustName'];

+0

Je suis en mesure de voir les éléments du tableau en utilisant 'var _dump ($ item) 'mais quand essayé avec ce' $ item-> Customer-> CustName', obtenir à nouveau cette erreur - ** Essayer d'obtenir la propriété de non-objet **. Merci pour la suggestion rapide. Voir ma mise à jour post. – user8512043

+0

J'ai mis à jour ma réponse :) – Amjo

+0

Great! Merci beaucoup et a parfaitement fonctionné. J'ai appris beaucoup de choses :) – user8512043