erreur Zend_Soap_Client appeler le service Web ASP.net: « ... non définie à une instance d'un objet »

StackOverflow https://stackoverflow.com/questions/4184470

Question

Je suis en train d'utiliser Zend_Soap_Client pour communiquer avec un service Web ASP.net. Voici mon appel client:

$client = new Zend_Soap_Client(null, array(
    'location' => 'http://example.com/service.asmx',
    'uri' => 'http://example.com/'
));

$user = new UserDetail();
$result = $client->UserDetails($user);

Cependant, cela me donne toujours l'erreur:

  

System.NullReferenceException: référence d'objet non définie à une instance d'un objet. à Service.UserDetails (userDetail userDetail)

googling a révélé que ce problème est assez commun. La solution la plus commune semblait être de transmettre les paramètres comme un tableau, alors j'ai essayé:

$result = $client->UserDetails(array('UserDetail' => $user));

mais cela a donné la même erreur. J'ai aussi essayé passer les params comme un objet stdClass, l'imbrication du tableau dans un autre avec « params » comme la clé, et quelques autres choses, mais l'erreur est toujours le même.

J'ai le code ASP pour le service Web lui-même, la méthode pertinente est la suivante:

public Result UserDetails(UserDetail UserDetail) {

    [some stuff]

    Hashtable ht = new Hashtable();
    ht = UserDetail.GenerateData();
}

l'erreur est causée par l'appel GenerateData ().

Je suppose que la méthode UserDetails devient nulle à la place de mon objet comme paramètre, mais je ne sais pas comment je devrais appeler la méthode, ou comment je peux déboguer davantage. La plupart des exemples Zend_Soap_Client que j'ai trouvé semblent être en utilisant WSDL, qui ce service est pas; pas sûr si cela est pertinent. Toute aide appréciée!

Était-ce utile?

La solution

J'ai finalement résolu cela avec:

$userDetails = new UserDetails();
$userDetails->UserDetail = $user;

$client->UserDetails($userDetails);

il semble ASP.net (et attend des retours) params être imbriqué dans un objet / tableau avec le même nom que la méthode appelée.

Autres conseils

Si vous avez une possibilité de modifier le code asp.net je vous suggère d'essayer une implémentation de la méthode UserDetails sans paramètres juste pour vous assurer que le code ne soit pas rompu.

Je puis créer une méthode à la consommation en asp.net, déboguer le http-demande et voir comment l'userDetail-objet est sérialisé / décomposé sous forme de tableau. Ensuite, il est « juste » une question de la création d'une semblable demande http de php.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top