Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carlos N Costa

Cliente PHP consumindo Web Service .Net

Recommended Posts

Desenvolvi um Web Service com VB.Net para uma aplicação PHP consumi-lo. O Web Method possui um parâmetro do tipo Integer. O cliente consegue invocar o método normalmente, mas o valor passado por parâmetro é sempre recebido como zero (0), ou seja, nulo. Alguém sabe por quê?

 

Eu tive uma experiência parecida com um cliente Python, que foi resolvido fazendo com que a chamada do método utilizasse o protocolo RPC (System.Web.Services.Protocols.SoapRpcMethod()). Fiz o mesmo para o PHP, mas não funcionou. Não foi possível nem conectar ao servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está usando que biblioteca do PHP?

Eu lembro que quando fiz isso, o nome dos parâmetros precisavam estar exatamente iguais, maiúsulo/minúsculo etc...

Posta um trecho do código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oening,

 

já testamos duas bibliotecas PHP para consumir o Web Service. Segue o código escrito para cada uma delas:

 

SOAP PHP (padrão do PHP)

===================================

// Criando o cliente SOAP
$cliente = new SoapClient("ConsultaDeProjetos.wsdl", array("encoding" => "ISO-8859-1"));

// Chamando um dos serviços cadastrados passando um argumento
$xml = $cliente->consultarProjetosSistemas(1376);

// Capturando o resultado
$resultado = simplexml_load_string($xml->ConsultaProjetosSistemasResult);
NuSOAP (biblioteca de terceiro, uma das mais usadas)

===================================

// Carregando a biblioteca e configurando
require_once './lib/nusoap.php';
$wsdl = "ConsultaDeProjetos.wsdl";

// Criando o cliente SOAP
$cliente = new soap_client($wsdl, true);

// Checando os erros
if($cliente->getError())
   echo "ERRO: ".$cliente->getError();
  // Chamando o serviço cadastro no webservice com um argumento
$xml = $cliente->call("consultarProjetosSistemas", array(1376));

// Capturando o resultado
$resultado = simplexml_load_string($xml);

Compartilhar este post


Link para o post
Compartilhar em outros sites

$xml = $cliente->call("consultarProjetosSistemas", array(numero => 1376));
Onde numero é o nome do parâmetro que você definiu no seu WebService.

Faz anos que não uso PHP, não lembro da sintaxe, talvez esteja errada, mas a idéia é essa.

A chave do seu array deve ser o nome do parâmetro, e o valor do array, o valor que o parâmetro WS vai receber.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oenning,

 

substituímos a chamada anterior por esta

 

$xml = $cliente->call("consultarProjetosSistemas", array("codigoLotacao" => "1376"))

 

e não funcionou. Ocorreu o mesmo problema. O serviço é acionado, mas o parâmetro não é passado/recebido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja tentou:

array(codigoLotacao => 1376)
Lembro que quando eu fiz, tive problema com os parâmetros, fiquei um tempo tentando fazer, e o problema era com os nome mesmo.

 

Tenta alterar para tipo String ou Object para ver se está chegando algum valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oenning,

 

já testamos das duas formas: array("codigoLotacao" => 1376) e array("codigoLotacao" => "1376"). Se removermos as aspas do nome do parâmetro, dá erro.

 

O cliente que você desenvolveu acessa Web Service .Net? Você sabe se o método do Web Service precisou da diretiva System.Web.Services.Protocols.SoapRpcMethod() para que ocorresse a comunicação completa com o cliente PHP?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @lusyps,

 

Obrigado por compartilhar seu conhecimento conosco.

 

Continue contribuindo respondendo os tópicos mais recentes.

 

Abraços

 

Mário Monteiro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser tarde para responder, mas vamos lá:

 

Tive o mesmo problema , eu tinha um webservice em java e estava tentando acessar via php, e os parametros iam nulos.

 

Eu estava fazendo assim:

 

$oUrl = array('nome'=>'aa22a', 'numeroCartao' => 2222332, 'valor' => 2333333);

$dados = $client->call("pagarComCartao", $oUrl);

 

E o correto seria enviar um array dentro de um outro array no metodo call

 

$oUrl = array('nome'=>'aa22a', 'numeroCartao' => 2222332, 'valor' => 2333333);

$dados = $client->call("pagarComCartao", array($oUrl));

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.