+2

Acessando webservices feitos em .NET

criado por Flávio Gonçalves Garcia em 08/03/2004 11:37am
Segue os links importantes para realizar a experiência:

Endereço dos webservices gratis:

http://www.webservicex.net/WS/default.aspx

Endereço do nosso amigo Global Weather:

http://www.webservicex.net/WS/WSDetails.aspx?CATID=12&WSID=56

Página da NUSOAP:

http://dietrich.ganx4.com/nusoap/index.php

Pdf da WROX que está na NUSOAP:

http://dietrich.ganx4.com/download.php?url=/nusoap/downloads/7469_Chap08.pdf

Aplicação funcionando:
http://www.viacerrado.com/webservices/getweatherclient/aeroporto_brasil.php

Arquivo rar com a aplicação:
http://www.viacerrado.com/webservices/getweatherclient.rar

Eu acho que é só por enquanto...

Qualquer coisa, manda uma mensagem.

Um abraço,

Flávio Garcia(Pir@z)

Comentários:

Mostrando 1 - 10 de 19 comentários
Josué Camelo disse:
por que desse erro:


Warning: SoapClient::SoapClient() expects parameter 2 to be array, string given in C:\htdocs\teste.php on line 3

Fatal error: Uncaught SoapFault exception: [Client] SoapClient::SoapClient() [<a href='soapclient.soapclient'>soapclient.soapclient</a>]: Invalid parameters in C:\htdocs\teste.php:3 Stack trace: #0 C:\htdocs\teste.php(3): SoapClient->SoapClient('http://www.webs...&#039;, 'wsdl') #1 {main} thrown in C:\htdocs\teste.php on line 3
09/07/2009 12:04pm (~14 anos atrás)

Manda pra mim o endereço desse web service
21/03/2006 5:36am (~18 anos atrás)

Caro Flavio e amigos,

não sei se vocês viram que o Webservices do Correios é feito em .NET, tentei acessar e não consegui. Por acaso vocês conseguiram? O meu retorno foi vazio.

Juro que se der certo saio pulando como o Patolino, hauhuahua

Abraços,

Jeff
21/03/2006 4:25am (~18 anos atrás)

Flavio eu tentei o codigo que vc me mandou e não funcionou...
Obtive uma tela em branco como resposta...

No entanto tenho boas noticias:
Com ajuda do meu amigo Rogerio Pereira la dew Goiania conseguimos fazer o webservice funcionar!

eis o codigo final:

require_once('nusoap.php');
$wsdl="http://localhost/testes_webservice/Soma.wsdl";
$client = new soapclient($wsdl, true);
$param=array('Valor1'=>20 , 'Valor2'=>30);
$Response = $client->call('Soma', $param, '', '', false, true);
echo $Response;


Simples não?

Notem que acrecentei apenas o parametro true ao instanciar o objeto e usei 2 parametros em branco, um false e um true no $client->call

agora o que significam esses parametros não me perguntem pois não tenho a menor ideia...

Quando tiver tempo vou pesquisar o que significam...

Flavio, muito obrigado pelo apoio!

Espero poder compartilhar meus conhecimentos com vcs!


[ ]'s
22/02/2005 2:44pm (~19 anos atrás)

tenta isso aqui:
<?php
require_once('nusoap.php');
$wsdl="http://localhost/testes_webservice/Soma.wsdl";
//Conectando
$client = new soapclient($wsdl,'wsdl');
$param = "<soap:Body><Soma xmlns=\"http://schemas.xmlsoap.org/wsdl/\"><Valor1>20</Valor1><Valor2>30</Valor2></Soma></soap:Body>";
$Response = $client->call('Soma', $param);
echo $Response;
?>
22/02/2005 1:32pm (~19 anos atrás)

Para maior clareza do problema mando a seguir o codigo que consegui desenvolver até agora mas que infelizmente NÂO FUNCIONA!


<?php
require_once('nusoap.php');
$wsdl="http://localhost/testes_webservice/Soma.wsdl";
//Conectando
$client = new soapclient($wsdl,'wsdl');
$param = array('Valor1'=>20 , 'Valor2'=>30);
$Response = $client->call('Soma', $param);
echo $Response;
?>

No servidor.exe que foi desenvolvido em Delphi pelo pessoal aqui da empresa é onde se encontra o corpo das funções.

Neste exemplo, A função é uma simples soma do Valor1 com o Valor2.

Esse servidor gera um arquivo Soma.wsdl que contem apenas os cabeçalhos xml das funções.
Mas em nenhum momento ele diz que a resposta é Valor + Valor2...

Tambem tentei com
$param=array('ReservaService','ReservaPort','Valor1'=>20 , 'Valor2'=>30);

mas tambem não fucionou...

Acrescentando este codigo:


// Display the request and response
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';


Obtenho o seguinte resultado:

Request
POST /testes_webservice/SophiA.wsdl HTTP/1.0
Host: localhost
User-Agent: NuSOAP/0.6.8 (1.85)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: ""
Content-Length: 679

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:si="http://soapinterop.org/xsd"><SOAP-ENV:Body><ns6456:Soma xmlns:ns6456="http://tempuri.org"><soapVal xsi:type="xsd:string">ReservaService</soapVal><soapVal xsi:type="xsd:string">ReservaPort</soapVal><Valor1 xsi:type="xsd:int">20</Valor1><Valor2 xsi:type="xsd:int">30</Valor2></ns6456:Soma></SOAP-ENV:Body></SOAP-ENV:Envelope>
Response
HTTP/1.1 405 Method Not Allowed
Date: Tue, 22 Feb 2005 17:51:40 GMT
Server: Apache/1.3.31 (Win32) PHP/5.0.3
Allow: GET, HEAD, OPTIONS, TRACE
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>405 Method Not Allowed</TITLE>
</HEAD><BODY>
<H1>Method Not Allowed</H1>
The requested method POST is not allowed for the URL /testes_webservice/SophiA.wsdl.<P>
<HR>
<ADDRESS>Apache/1.3.31 Server at desenv5 Port 80</ADDRESS>
</BODY></HTML>




Soma.wsdl:

<?xml version="1.0" encoding="UTF-8" ?>
<definitions
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
name="ServLib"
targetNamespace="http://tempuri.org/"
xmlns:tns="http://tempuri.org/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:ro="urn:ServLib"
>

<message name="SomaRequest">
<part name="Valor1" type="xs:int" />
<part name="Valor2" type="xs:int" />
</message>
<message name="SomaResponse">
<part name="Result" type="xs:int" />
</message>

<portType name="Reserva">
<operation name="Soma">
<input message="tns:SomaRequest" />
<output message="tns:SomaResponse" />
</operation>
</portType>

<binding name="ReservaBinding" type="tns:Reserva">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="Soma">
<soap:operation soapAction="urn:ServLib-PesquisaService#Soma" style="rpc" />
<input message="SomaRequest">
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:ServLib-PesquisaService" />
</input>
<output message="SomaResponse">
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"namespace="urn:ServLib-PesquisaService" />
</output>
</operation>
</binding>

<service name="ReservaService">
<documentation></documentation>
<port name="ReservaPort" binding="tns:ReservaBinding">
<soap:address location="http://localhost:8099/SOAP" />
</port>
</service>

</definitions>
22/02/2005 12:56pm (~19 anos atrás)

Obrigado pela força Flávio

Pelo menos agora eu tenho mais esperanças...

Só umas perguntas:

O nusoap é um bom caminho para mim?

Vou precisar de mais alguma ferramenta?

Note que no codigo asp eu tenho:

Call soapclient.mssoapinit(Server.MapPath("Nome.wsdl"),"ReservaService","ReservaPort")

Como poderia fazer algo semelhante com o php?

Obrigado novamente!





22/02/2005 9:43am (~19 anos atrás)

Cara é do mesmo jeito que eu fiz com o .net mas como a parada vai estar sendo feita direto no SOAP vc usa array como argumento em vez de ser um xml...
21/02/2005 12:04pm (~19 anos atrás)

Parabens pelo artigo, mas eu tenho uma nova missão para vcs...

É possível acessar um webservice com o servidor feito em Delphi e o cliente em PHP?

Vou especificar melhor...
Minha empresa tem um servidor feito em em Delphi e nossos sites feitos em ASP acessam facilmente esse webservice com apenas poucas linhas:

Set soapclient = Server.CreateObject("MSSOAP.SoapClient30")

Call soapclient.mssoapinit(Server.MapPath("Nome.wsdl"),"ReservaService","ReservaPort")

Com isso as paginas ASP conseguem utilizar funções que estão nesse servidor.exe (feito em delphi) bastando para isso ter o SOAP tool Kit 3.0, e o servidor.exe instalado na maquina.

Como gosto mais do PHP que do ASP, estou numa luta para tentar demonstrar que é possível fazer a mesma coisa com o PHP, mas esta dificil...

O que eu fiz até agora foi baixar o NuSoap e ja consegui rodar os exemplos que encontrei por aí...
No entanto todos usam servidores e funções feitas no propio PHP.

E se eu quiser usar as funções feitas no Delphi????


Por favor me AJUDEM!


21/02/2005 9:19am (~19 anos atrás)

Tentei implementar o mesmo script com um webservice simples que montei aqui mas não consegui sucesso na hora de receber o resultado do webservice.

Agluém poderia me dar uma ajuda?
Posso mandar meus fontes e o webservice também.

desde já agradeço atenção,

-LC
27/01/2005 1:10pm (~19 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)