RASTREAMENTO CORREIOS DE OBJETO

JOAOBENEVIDES 14/06/2016 14:09:23
#463487
Ola Pessoal tenho este web service do correios
http://webservice.correios.com.br/service/rastro/Rastro.wsdl
onde posso fazer o rastreamento de objeto porem meu erro é o seguinte eu faco a consulta com este codigo

using SIA.br.Rastreamento;


no codigo

rastro servicos = new rastro();
sroxml retorno = new sroxml();


retorno = servicos.buscaEventos([Ô]XXXXXX[Ô], [Ô]XXXX[Ô], [Ô]L[Ô], [Ô][Ô], [Ô]001[Ô], Numero);
porem ele nunca me retorna nada ai minha duvida no soapigui fiz a mesma consulta e ele me retornou
conforme img o que eu posso estar fazendo de errado
MESTRE 14/06/2016 15:38:07
#463493
Cara acho que o WebService dos correios está com problemas, eu mesmo uso o websro para rastreamento e ele não ta funcionando..
JOAOBENEVIDES 14/06/2016 16:05:42
#463496
entao porque via soapgui deu certo
KERPLUNK 15/06/2016 02:00:59
#463530
Esquisito o jeito que fizeram esse WebService... mas enfim, o que acontece é que o retorno, eles estão enviando de modo [Ô]cru[Ô] no corpo do envelope do SOAP. Em suma, não existe uma maneira de se usar o client de modo normal para poder pegar esses dados. é necessário implementar a interface IEndPointBehaviour para modificar o comportamento normal do serviço. é relativamente simples de ser feito, mas pouco conhecido entre programadores, simplesmente porque é um método muito esquisito de se trabalhar. Como é algo bem fora do comum, fiz um exemplo que está em anexo. Divirtam-se!
KERPLUNK 15/06/2016 02:03:08
#463531
Resposta escolhida
Complementando: é por isso que no SoapUI funciona certinho, porque ele trabalha justamente assim, diretamente no envelope SOAP construindo toda a mensagem e exibindo o retorno da forma como recebe.
AFERNANDES 17/06/2016 09:40:25
#463713
Citação:

:
Esquisito o jeito que fizeram esse WebService... mas enfim, o que acontece é que o retorno, eles estão enviando de modo [Ô]cru[Ô] no corpo do envelope do SOAP. Em suma, não existe uma maneira de se usar o client de modo normal para poder pegar esses dados. é necessário implementar a interface IEndPointBehaviour para modificar o comportamento normal do serviço. é relativamente simples de ser feito, mas pouco conhecido entre programadores, simplesmente porque é um método muito esquisito de se trabalhar. Como é algo bem fora do comum, fiz um exemplo que está em anexo. Divirtam-se!



Perfeito, funcionou certinho!

- Correios e seus webservices fora dos padrões para dificultar as coisas.
JOAOBENEVIDES 17/06/2016 11:28:16
#463722
decupe a reativação mais esta sugirn uma duvida uma fez eu consegui consultar porem algora esta me retornon isto

The request channel timed out while waiting for a reply after 00:00:57.6168636. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.

o que sera agora
JASBAS 08/09/2016 12:36:45
#466629
Citação:

:
Complementando: é por isso que no SoapUI funciona certinho, porque ele trabalha justamente assim, diretamente no envelope SOAP construindo toda a mensagem e exibindo o retorno da forma como recebe.



Boa Tarde , KERPLUNK.

Eu enviei uma mensagem para você como eu não tenho certeza que você recebeu então estou postando aqui.
De ante mão agradeço a explicação que você postou sobre o retorno , pois graças a ela eu entendi o que estava acontecendo.
Mais eu preciso se possivel que você explicasse qual foi a solução que você aplicou para resolver o problema para eu verificar
se consigo aplicar no meu CLIENT.
O CLIENT eu desenvolvi em uma outra Linguagem no caso o ADVPL(ERP-TOTVS) e esta me acusando o seguinte ERRO:
Unknown element X-OPNET-Transaction-Trace ==> Tradução => Desconhecido elemento X-OPNET-Transaction-Trace

Então eu fiz um DE - PARA do retorno do SOAPUI que não acusa ERRO com o meu CLIENTE:

**RETORNO SOAPUI SEM ERRO

<soapenv:Envelope xmlns:soapenv=[Ô]http://schemas.xmlsoap.org/soap/envelope/[Ô]>
<soapenv:Header>
<X-OPNET-Transaction-Trace:X-OPNET-Transaction-Trace xmlns:X-OPNET-Transaction-Trace=[Ô]http://opnet.com[Ô]>pid=58091,requestid=79a78f95670647b0afb3645193515e4b9c62b2a7b1bc0b0d</X-OPNET-Transaction-Trace:X-OPNET-Transaction-Trace>
</soapenv:Header>
<soapenv:Body>
<ns2:RastroJsonResponse xmlns:ns2=[Ô]http://resource.webservice.correios.com.br/[Ô]>
<return>{[Ô]sroxml[Ô]:{[Ô]qtd[Ô]:1,[Ô]objeto[Ô]:{[Ô]categoria[Ô]:[Ô]ENCOMENDA PAC[Ô],[Ô]evento[Ô]:{[Ô]comentario[Ô]:[Ô][Ô],[Ô]cidade[Ô]:[Ô]Rio De Janeiro[Ô],[Ô]descricao[Ô]:[Ô]Objeto entregue ao destinatário[Ô],[Ô]data[Ô]:[Ô]05/09/2016[Ô],[Ô]local[Ô]:[Ô]XXX PENHA[Ô],[Ô]recebedor[Ô]:[Ô][Ô],[Ô]uf[Ô]:[Ô]RJ[Ô],[Ô]status[Ô]:[Ô]01[Ô],[Ô]tipo[Ô]:[Ô]BDE[Ô],[Ô]documento[Ô]:[Ô][Ô],[Ô]hora[Ô]:[Ô]16:29[Ô],[Ô]codigo[Ô]:21020978,[Ô]detalhe[Ô]:[Ô][Ô]},[Ô]sigla[Ô]:[Ô]PJ[Ô],[Ô]nome[Ô]:[Ô]ENCOMENDA PAC[Ô],[Ô]numero[Ô]:[Ô]PJXXXXXXXXXBR[Ô]},[Ô]TipoPesquisa[Ô]:[Ô]Lista de Objetos[Ô],[Ô]TipoResultado[Ô]:[Ô]Último evento[Ô],[Ô]versao[Ô]:2}}</return>
</ns2:RastroJsonResponse>
</soapenv:Body>
</soapenv:Envelope>


****RETORNO DO MEU CLIENT COM ERRO
<?xml version=[Ô]1.0[Ô] encoding=[Ô]UTF-8[Ô]?>
<soapenv:Envelope xmlns:soapenv=[Ô]http://schemas.xmlsoap.org/soap/envelope/[Ô]>
<soapenv:Header>
<X-OPNET-Transaction-Trace:X-OPNET-Transaction-Trace xmlns:X-OPNET-Transaction-Trace=[Ô]http://opnet.com[Ô]>pid=58091,requestid=42c68f95670647b0f1104c5193515e4b8362b2a7b1bc0b0d</X-OPNET-Transaction-Trace:X-OPNET-Transaction-Trace>
</soapenv:Header>
<soapenv:Body>
<ns2:RastroJsonResponse xmlns:ns2=[Ô]http://resource.webservice.correios.com.br/[Ô]>
<return>{}</return>
</ns2:RastroJsonResponse>
</soapenv:Body>
</soapenv:Envelope>

**O meu CLIENT não esta conseguindo interpretar esse Trecho do Retorno:
<soapenv:Header>
<X-OPNET-Transaction-Trace:X-OPNET-Transaction-Trace xmlns:X-OPNET-Transaction-Trace=[Ô]http://opnet.com[Ô]>pid=58091,requestid=42c68f95670647b0f1104c5193515e4b8362b2a7b1bc0b0d</X-OPNET-Transaction-Trace:X-OPNET-Transaction-Trace>
</soapenv:Header>

Então se for possivel você explicar qual a solução você aplicou para resolver o Problema e u agardeço



KERPLUNK 08/09/2016 16:37:33
#466637
Sem problemas!
O que fiz: Modifiquei o comportamento do Client, adicionando uma classe que implemente [Ô]IEndpointBehavior[Ô]. Dessa maneira, consigo interceptar a mensagem antes que qualquer coisa aconteça com ela. Ou seja, faço basicamente o que o SoapUI faz. Observe como fiz no exemplo:

//Instanciando o webserivce normalmente
correio.ServiceClient client = new correio.ServiceClient();

//Instanciando o [Ô]interceptador[Ô](alterador de comportamento) da mensagem, a classe que implementa [Ô]IEndpointBehavior[Ô]
var requestInterceptor = new InspectorBehavior();

//Adiciono aos comportamentos do endpoint do client
client.Endpoint.Behaviors.Add(requestInterceptor);

//Executo o método desejado no client, normalmente
client.buscaEventos([Ô]SEU USUARIO AQUI[Ô], [Ô]SUA SENHA AQUI[Ô], [Ô]L[Ô],[Ô][Ô],[Ô]001[Ô], txtObjeto.Text);

//Ao invés de buscar o resultado do método do client, eu busco o que o [Ô]interceptador[Ô] contém
string requestXML = requestInterceptor.LastRequestXML;

//abaixo disso, é o processo de serialização normal, mas da resposta crua interceptada.
XmlSerializer ser = new XmlSerializer(typeof(Envelope));
using (TextReader reader = new StringReader(requestInterceptor.LastResponseXML))
{
envelope = (Envelope)ser.Deserialize(reader);
}
returnObjeto objetoRastreado = envelope.Body.buscaEventosResponse.@return.objeto;
Tópico encerrado , respostas não são mais permitidas