none
WEB SERVICES USANDO SOAP E HTTP REQUEST RRS feed

  • Pergunta

  • Boa tarde.

    Amigos desenvolvedores, estou com um enorme problema. Preciso fazer requisições em um web services, mas nao por web referenc e sim http request, as razões sao diversas, mas enfim, terá de ser por http request e nao web reference.
    Já pesquisei a internet de ponta cabeça, os exemplos que dão, da ate vergonha, pois apenas exemplos muito simples. Que dificilmente se encontra no dia-a-dia. Por isso, cheguei aqui, na esperança que algum profissional certificado e mais experiente pudesse resolver.
    Eis o cenário:

    Como ja ocmentei preciso fazer requisição em um web service, acessar o método do WS e pegar o retorno. Tudo isso via http request.

    Abaixo disponibilizo o wsdl do WS, também o xml que estou enviando via protocolo SOAP 1.1 e também o codigo fonte.
    O metodo que preciso chamar e pegar o retorno é o: receberEventoLogistico

    Quem puder ajudar na solução ou puder indicar algum site realmente contendo informações que possa me ajudar a resolver o problema, pois como disse, a maioria que procurei nao tinha exemplos com o cenario exposto. Vale a pena dizer que pesquisei em sites em Ingles.
    Muito obrigado.

    WSDL do Webservices

      <?xml version="1.0" encoding="UTF-8" ?>
    - <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap11="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp200409="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsp200607="http://www.w3.org/2006/07/ws-policy" xmlns:ns0="http://servicos.gpanet.com.br/frete/eventos/" targetNamespace="http://servicos.gpanet.com.br/frete/eventos/">
    - <wsdl:types xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    - <xsd:schema>
      <xsd:import schemaLocation="eventos.xsd3.xsd" namespace="http://servicos.gpanet.com.br/frete/eventos/" />
      <xsd:import schemaLocation="eventos.xsd4.xsd" namespace="http://servicos.gpanet.com.br/frete/eventos/" />
      </xsd:schema>
      </wsdl:types>
    - <wsdl:message name="ReceberEventoLogisticoRequestMessage">
      <wsdl:part name="request" element="xsns:rms" xmlns:xsns="http://servicos.gpanet.com.br/frete/eventos/" />
      </wsdl:message>
    - <wsdl:message name="ReceberEvetoLogisticoResponseMessage">
      <wsdl:part name="response" element="xsns:rms_RESULT" xmlns:xsns="http://servicos.gpanet.com.br/frete/eventos/" />
      </wsdl:message>
    - <wsdl:portType name="EventosLogisticoPort">
    - <wsdl:operation name="receberEventoLogistico">
      <wsdl:input name="receberEventoLogisticoRequest" message="ns0:ReceberEventoLogisticoRequestMessage" />
      <wsdl:output name="receberEventoLogisticoResponse" message="ns0:ReceberEvetoLogisticoResponseMessage" />
      </wsdl:operation>
      </wsdl:portType>
    - <wsdl:binding name="EventosLogisticoSOAP11Binding" type="ns0:EventosLogisticoPort">
      <soap11:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
    - <wsdl:operation name="receberEventoLogistico">
      <soap11:operation soapAction="http://servicos.gpanet.com.br/Frete/EventosLogisticos/receberEventoLogistico" style="document" />
    - <wsdl:input name="receberEventoLogisticoRequest">
      <soap11:body parts="request" use="literal" />
      </wsdl:input>
    - <wsdl:output name="receberEventoLogisticoResponse">
      <soap11:body parts="response" use="literal" />
      </wsdl:output>
      </wsdl:operation>
      </wsdl:binding>
    - <wsdl:service name="EventosLogisticosPS">
    - <wsdl:port name="EventosLogisticos" binding="ns0:EventosLogisticoSOAP11Binding">
      <soap11:address location="https://189.20.217.112:443/frete/eventos" />
      </wsdl:port>
      </wsdl:service>
      </wsdl:definitions>

    xml_request (esta é o pacote xml que é enviado, estou passando esse coteudo na variavel xml_request la no codigo)

    <soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:even='http://servicos.gpanet.com.br/frete/eventos/'>
      <soapenv:Header/>
      <soapenv:Body>
        <DADOS>
          <EVENTO>
            <NU_SMP>519137</NU_SMP>
            <NU_ANO_SMP>2010</NU_ANO_SMP>
            <DS_DOC_CONTROLE>19870006145</DS_DOC_CONTROLE>
            <DT_EVENTO>21/4/2010 19:33:35</DT_EVENTO>
            <CD_EVENTO>1</CD_EVENTO>
            <DS_EVENTO>Saída da Origem</DS_EVENTO>
            <NU_LAT>-22,619530</NU_LAT>
            <NU_LONG>-22,619530</NU_LONG>
            <DS_PLACA_CAVALO>CPR4981</DS_PLACA_CAVALO>
            <DS_PLACA_CARRETA>DJB9543</DS_PLACA_CARRETA>
            <NM_PONTO>CD 16 - FLORES HOLAMBRA - SP</NM_PONTO>
            <NM_APELIDO_PONTO>1987</NM_APELIDO_PONTO>
            <DS_DOCUMENTO_NF></DS_DOCUMENTO_NF>
            <TEMPERATURA>0</TEMPERATURA>
          </EVENTO>
        </DADOS>
      </soapenv:Body>
    </soapenv:Envelope>


    Codigo CS - Se detectarem algo que não estou passando ou que que seja necessário fazer por favor me avisem. Pois é a primeira vez que eu trabalho com HTTP REQUEST

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://servicos.cbdnet.com.br/frete/eventos");

    WebProxy objProxyAuth;
    objProxyAuth = new WebProxy("http://proxy.rms.com.br:3128", true, null, new NetworkCredential(ConfigurationManager.AppSettings["proxy_usuario"], ConfigurationManager.AppSettings["proxy_pw"], "rms"));
    request.Proxy = objProxyAuth;

    request.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate2("rms_private.pfx", "senha"));

    request.Method = "POST";
    request.ContentType = "text/xml";
    #endregion

    byte[] sendData = UTF8Encoding.UTF8.GetBytes(xml_request); //xml_request acima esta o pacote xml
    Stream requestStream = request.GetRequestStream();

    requestStream.Write(sendData, 0, sendData.Length);
    requestStream.Flush();
    requestStream.Dispose();

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream responseStream = response.GetResponseStream();
    MemoryStream output = new MemoryStream();
    byte[] buffer = new byte[256];

    int byteReceived = -1;
    do
    {
     byteReceived = responseStream.Read(buffer, 0, buffer.Length);
     output.Write(buffer, 0, byteReceived);
    } while (byteReceived > 0);

    responseStream.Dispose();
    response.Close();
    buffer = output.ToArray();
    output.Dispose();
    string xmlRetorno = UTF8Encoding.UTF8.GetString(buffer);

     

    terça-feira, 30 de novembro de 2010 17:58

Todas as Respostas