Zend_Soap_Client error de llamar al servicio web ASP.net: '... no establecida como instancia de un objeto'

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

Pregunta

Estoy tratando de utilizar Zend_Soap_Client para comunicarse con un servicio web ASP.net. Aquí está mi llamada del cliente:

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

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

Sin embargo, esto siempre me da el error:

System.NullReferenceException: referencia a objeto no establecida como una instancia de un objeto. en Service.UserDetails (UserDetail UserDetail)

algunas google reveló que este es un problema bastante común. La solución más común parecía ser la de pasar los parámetros como una matriz, así que probé:

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

pero esto dio el mismo error. También probé pasar los parametros como un objeto stdClass, anidando la matriz en otro con params '' como la clave, y algunas otras cosas, pero el error es siempre la misma.

Tengo el código ASP para el propio servicio web, el método correspondiente es:

public Result UserDetails(UserDetail UserDetail) {

    [some stuff]

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

el error es causado por la llamada GenerateData ().

Asumo el método DetallesUsuario está recibiendo nulo en lugar de mi objeto como parámetro, pero no estoy seguro de cómo debería de llamar al método, o cómo puedo depurar más a fondo. La mayoría de los ejemplos que he encontrado Zend_Soap_Client Estas usando WSDL, que este servicio no lo es; No sé si eso es relevante. Cualquier ayuda apreciada!

¿Fue útil?

Solución

Finalmente he resuelto esto con:

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

$client->UserDetails($userDetails);

parece Espera de ASP.NET (y retornos) params ser anidado en un objeto / matriz con el mismo nombre que el método que se llama.

Otros consejos

Si tiene alguna posibilidad de cambiar el código asp.net me gustaría sugerir se intenta una implementación de los DetallesUsuario método sin parámetros sólo para asegurarse de que el código no está roto.

I a continuación, crearía un consumidor-método en asp.net, depurar la petición http y ver cómo se serializa / descompone en forma array la userdetail a objetos. Entonces es "sólo" una cuestión de crear una petición http similar de php.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top