Acessando webservices feitos em .NET
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)
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)
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
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
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;
?>
<?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>
<?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!
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!
É 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
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)
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...', 'wsdl') #1 {main} thrown in C:\htdocs\teste.php on line 3