none
Consumindo Webservice com sobrecarga de metodo

    Pergunta

  • Ola turma,

    mais uma vez venho pedir a ajuda de vocês para me ajudar a resolver um problema que acredito ser simples.

    Não tenho experiência com webservices e estou, por obrigação do trabalho, tendo que consumir um webservice.

    Na minha aplicação adicionei um Service Reference (inseri o caminho do arquivo wsdl, e gerei a classe para serviços e operações)

    Comecei a tentar consumir o Webservice e venho recebendo a seguinte mensagem:

     

    RPC Message incluirRetrancaRequest1 in operation incluirRetranca1 has an invalid body name incluirRetranca. It must be incluirRetranca1

     

    Não sei como resolver o problema

     

    Atencisoamente

     

    Leandro Taddeo

    segunda-feira, 12 de abril de 2010 21:21

Respostas

  • O erro esta na geracao do wsdl... ou ele ta errado ou nao ta seguindo o padrao W3C e vc nao vai conseguir consumir no Visual Studio...

    se vc ver... nem mesmo exite uma operacao incluirRetranca1 no wsdl...  e tem 2 incluirRetranca.... isso nao é valido no W3C portando esse service ou é proprietario para rodar numa ferramenta especifica... ou ta errado mesmo


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    terça-feira, 20 de abril de 2010 23:24
    Moderador
  • O teu aplicativo q consome o WebService é windows form ?

    se for é o seguinte (tmb faco assim) a informacao de usuario fica na sessao do apache la onde ta o webservice...

    para vc manter o estado da sessao vc prescisa armazernar os cookies (tipo eh que nem sessao asp.net mesmo... )

    No caso de uma pagina ASP.NET ou Silverlight... o teu iis sabe armazenar os cookies sozinho.. (ou deveria), no caso de um client WPF ou Winforms... é manual o processo...

    Para isso tem uma propriedade "CookieContainer" na sua classe do webservice... eu crio no Settings uma propriedade CookieContainer pq eu fico dando dispose o tempo todo no service... se vc mantem uma instancia sempre aberta dela é mais facil....

    mas basicamente é:

    Settings.Default.Cookies = new CookieContainer();

    using (var service = new djeArquivoWS()) {
        service.CookieContainer = Settings.Default.Cookies;

        var response = service.Login("xxxx", "*****");
        if (response == "ERRO") return;

    }

    using (var service = new djeArquivoWS()) {
        service.CookieContainer = Settings.Default.Cookies;
        service.incluirRetranca("xxx.zip");
    }


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    quinta-feira, 22 de abril de 2010 19:16
    Moderador

Todas as Respostas

  • WebServices não permite sobrecarga de metodos... vc tem que ter um nome excluisivo para cada webmethod

    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    terça-feira, 13 de abril de 2010 00:58
    Moderador
  • Segue a definicao do wsdl:

     

    <script type="text/javascript"></script>

      <? xml version="1.0" encoding="UTF-8" ?>
    - < wsdl:definitions targetNamespace =" http://192.168.10.6:8080/djeArquivoWS/Arquivo.jws " xmlns:apachesoap =" http://xml.apache.org/xml-soap " xmlns:impl =" http://192.168.10.6:8080/djeArquivoWS/Arquivo.jws " xmlns:intf =" http://192.168.10.6:8080/djeArquivoWS/Arquivo.jws " xmlns:soapenc =" http://schemas.xmlsoap.org/soap/encoding/ " xmlns:wsdl =" http://schemas.xmlsoap.org/wsdl/ " xmlns:wsdlsoap =" http://schemas.xmlsoap.org/wsdl/soap/ " xmlns:xsd =" http://www.w3.org/2001/XMLSchema " >
    - <!--
    WSDL created by Apache Axis version: 1.4
    Built on Apr 22, 2006 (06:55:48 PDT)
      --> <script type="text/javascript"></script>
    - < wsdl:message name =" loginRequest " >
      < wsdl:part name =" cdUsuario " type =" xsd:string " />
      < wsdl:part name =" deSenha " type =" xsd:string " />
      </ wsdl:message >
    - < wsdl:message name =" enviarArquivoResponse " >
      < wsdl:part name =" enviarArquivoReturn " type =" xsd:string " />
      </ wsdl:message >
    - < wsdl:message name =" substituirRetrancaResponse1 " >
      < wsdl:part name =" substituirRetrancaReturn " type =" xsd:string " />
      </ wsdl:message >
    - < wsdl:message name =" incluirRetrancaRequest1 " >
      < wsdl:part name =" zipFile " type =" xsd:base64Binary " />
      </ wsdl:message >
    - < wsdl:message name =" loginResponse " >
      < wsdl:part name =" loginReturn " type =" xsd:string " />
      </ wsdl:message >
    - < wsdl:message name =" substituirRetrancaRequest1 " >
      < wsdl:part name =" zipFile " type =" xsd:base64Binary " />
      </ wsdl:message >
    - < wsdl:message name =" substituirRetrancaResponse " >
      < wsdl:part name =" substituirRetrancaReturn " type =" xsd:string " />
      </ wsdl:message >
    - < wsdl:message name =" incluirRetrancaResponse1 " >
      < wsdl:part name =" incluirRetrancaReturn " type =" xsd:string " />
      </ wsdl:message >
    - < wsdl:message name =" substituirRetrancaRequest " >
      < wsdl:part name =" nuPublicacoes " type =" xsd:int " />
      < wsdl:part name =" intervaloPublicacoes " type =" xsd:int " />
      < wsdl:part name =" zipFile " type =" xsd:base64Binary " />
      </ wsdl:message >
    - < wsdl:message name =" incluirRetrancaResponse " >
      < wsdl:part name =" incluirRetrancaReturn " type =" xsd:string " />
      </ wsdl:message >
    - < wsdl:message name =" incluirRetrancaRequest " >
      < wsdl:part name =" nuPublicacoes " type =" xsd:int " />
      < wsdl:part name =" intervaloPublicacoes " type =" xsd:int " />
      < wsdl:part name =" zipFile " type =" xsd:base64Binary " />
      </ wsdl:message >
    - < wsdl:message name =" enviarArquivoRequest " >
      < wsdl:part name =" nuPublicacoes " type =" xsd:int " />
      < wsdl:part name =" intervaloPublicacoes " type =" xsd:int " />
      < wsdl:part name =" zipFile " type =" xsd:base64Binary " />
      </ wsdl:message >
    - < wsdl:portType name =" Arquivo " >
    - < wsdl:operation name =" login " parameterOrder =" cdUsuario deSenha " >
      < wsdl:input message =" impl:loginRequest " name =" loginRequest " />
      < wsdl:output message =" impl:loginResponse " name =" loginResponse " />
      </ wsdl:operation >
    - < wsdl:operation name =" enviarArquivo " parameterOrder =" nuPublicacoes intervaloPublicacoes zipFile " >
      < wsdl:input message =" impl:enviarArquivoRequest " name =" enviarArquivoRequest " />
      < wsdl:output message =" impl:enviarArquivoResponse " name =" enviarArquivoResponse " />
      </ wsdl:operation >
    - < wsdl:operation name =" incluirRetranca " parameterOrder =" nuPublicacoes intervaloPublicacoes zipFile " >
      < wsdl:input message =" impl:incluirRetrancaRequest " name =" incluirRetrancaRequest " />
      < wsdl:output message =" impl:incluirRetrancaResponse " name =" incluirRetrancaResponse " />
      </ wsdl:operation >
    - < wsdl:operation name =" incluirRetranca " parameterOrder =" zipFile " >
      < wsdl:input message =" impl:incluirRetrancaRequest1 " name =" incluirRetrancaRequest1 " />
      < wsdl:output message =" impl:incluirRetrancaResponse1 " name =" incluirRetrancaResponse1 " />
      </ wsdl:operation >
    - < wsdl:operation name =" substituirRetranca " parameterOrder =" nuPublicacoes intervaloPublicacoes zipFile " >
      < wsdl:input message =" impl:substituirRetrancaRequest " name =" substituirRetrancaRequest " />
      < wsdl:output message =" impl:substituirRetrancaResponse " name =" substituirRetrancaResponse " />
      </ wsdl:operation >
    - < wsdl:operation name =" substituirRetranca " parameterOrder =" zipFile " >
      < wsdl:input message =" impl:substituirRetrancaRequest1 " name =" substituirRetrancaRequest1 " />
      < wsdl:output message =" impl:substituirRetrancaResponse1 " name =" substituirRetrancaResponse1 " />
      </ wsdl:operation >
      </ wsdl:portType >
    - < wsdl:binding name =" ArquivoSoapBinding " type =" impl:Arquivo " >
      < wsdlsoap:binding style =" rpc " transport =" http://schemas.xmlsoap.org/soap/http " />
    - < wsdl:operation name =" login " >
      < wsdlsoap:operation soapAction =" " />
    - < wsdl:input name =" loginRequest " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://DefaultNamespace " use =" encoded " />
      </ wsdl:input >
    - < wsdl:output name =" loginResponse " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://192.168.10.6:8080/djeArquivoWS/Arquivo.jws " use =" encoded " />
      </ wsdl:output >
      </ wsdl:operation >
    - < wsdl:operation name =" enviarArquivo " >
      < wsdlsoap:operation soapAction =" " />
    - < wsdl:input name =" enviarArquivoRequest " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://DefaultNamespace " use =" encoded " />
      </ wsdl:input >
    - < wsdl:output name =" enviarArquivoResponse " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://192.168.10.6:8080/djeArquivoWS/Arquivo.jws " use =" encoded " />
      </ wsdl:output >
      </ wsdl:operation >
    - < wsdl:operation name =" incluirRetranca " >
      < wsdlsoap:operation soapAction =" " />
    - < wsdl:input name =" incluirRetrancaRequest " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://DefaultNamespace " use =" encoded " />
      </ wsdl:input >
    - < wsdl:output name =" incluirRetrancaResponse " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://192.168.10.6:8080/djeArquivoWS/Arquivo.jws " use =" encoded " />
      </ wsdl:output >
      </ wsdl:operation >
    - < wsdl:operation name =" incluirRetranca " >
      < wsdlsoap:operation soapAction =" " />
    - < wsdl:input name =" incluirRetrancaRequest1 " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://DefaultNamespace " use =" encoded " />
      </ wsdl:input >
    - < wsdl:output name =" incluirRetrancaResponse1 " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://192.168.10.6:8080/djeArquivoWS/Arquivo.jws " use =" encoded " />
      </ wsdl:output >
      </ wsdl:operation >
    - < wsdl:operation name =" substituirRetranca " >
      < wsdlsoap:operation soapAction =" " />
    - < wsdl:input name =" substituirRetrancaRequest " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://DefaultNamespace " use =" encoded " />
      </ wsdl:input >
    - < wsdl:output name =" substituirRetrancaResponse " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://192.168.10.6:8080/djeArquivoWS/Arquivo.jws " use =" encoded " />
      </ wsdl:output >
      </ wsdl:operation >
    - < wsdl:operation name =" substituirRetranca " >
      < wsdlsoap:operation soapAction =" " />
    - < wsdl:input name =" substituirRetrancaRequest1 " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://DefaultNamespace " use =" encoded " />
      </ wsdl:input >
    - < wsdl:output name =" substituirRetrancaResponse1 " >
      < wsdlsoap:body encodingStyle =" http://schemas.xmlsoap.org/soap/encoding/ " namespace =" http://192.168.10.6:8080/djeArquivoWS/Arquivo.jws " use =" encoded " />
      </ wsdl:output >
      </ wsdl:operation >
      </ wsdl:binding >
    - < wsdl:service name =" ArquivoService " >
    - < wsdl:port binding =" impl:ArquivoSoapBinding " name =" Arquivo " >
      < wsdlsoap:address location =" http://10.1.24.8:8080/djeArquivoWS/Arquivo.jws " />
      </ wsdl:port >
      </ wsdl:service >
      </ wsdl:definitions >

    Inclui o mesmo como Service Reference

    Ao executar o codigo abaixo:

    Arquivo DJService = new ArquivoClient();
    loginRequest req = new loginRequest("PUBLIC_WSERVICE", "12345678");
    loginResponse resp = DJService.login(req);

    recebo a seguinte mensagem de erro:
    RPC Message incluirRetrancaRequest1 in operation incluirRetranca1 has an invalid body name incluirRetranca. It must be incluirRetranca1

     

    terça-feira, 20 de abril de 2010 16:00
  • O erro esta na geracao do wsdl... ou ele ta errado ou nao ta seguindo o padrao W3C e vc nao vai conseguir consumir no Visual Studio...

    se vc ver... nem mesmo exite uma operacao incluirRetranca1 no wsdl...  e tem 2 incluirRetranca.... isso nao é valido no W3C portando esse service ou é proprietario para rodar numa ferramenta especifica... ou ta errado mesmo


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    terça-feira, 20 de abril de 2010 23:24
    Moderador
  • Acabei corrigindo o wsdl por aqui na mão para poder consumir, obrigado Rui pela observação.

    A proposito agora me encontro com outra dificuldade.

     

    Eu tenho uma rotina de login e uma rotina de incluir retranca , mas sempre que valido o login e tento incluir a retranca o webservice diz que eu estou sem autenticação, o pessoal dono do webservice disse que eu tenho que pegar o identificador da sessão no cabecalho hhtp (achei muito sinistro isso pois dentro da minha percepção de webservice acreditava que deveria receber um token ou outra coisa que enviaria nos metodos posteriores).

    Alguma sugestão?

    quarta-feira, 21 de abril de 2010 15:25
  • O teu aplicativo q consome o WebService é windows form ?

    se for é o seguinte (tmb faco assim) a informacao de usuario fica na sessao do apache la onde ta o webservice...

    para vc manter o estado da sessao vc prescisa armazernar os cookies (tipo eh que nem sessao asp.net mesmo... )

    No caso de uma pagina ASP.NET ou Silverlight... o teu iis sabe armazenar os cookies sozinho.. (ou deveria), no caso de um client WPF ou Winforms... é manual o processo...

    Para isso tem uma propriedade "CookieContainer" na sua classe do webservice... eu crio no Settings uma propriedade CookieContainer pq eu fico dando dispose o tempo todo no service... se vc mantem uma instancia sempre aberta dela é mais facil....

    mas basicamente é:

    Settings.Default.Cookies = new CookieContainer();

    using (var service = new djeArquivoWS()) {
        service.CookieContainer = Settings.Default.Cookies;

        var response = service.Login("xxxx", "*****");
        if (response == "ERRO") return;

    }

    using (var service = new djeArquivoWS()) {
        service.CookieContainer = Settings.Default.Cookies;
        service.incluirRetranca("xxx.zip");
    }


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    quinta-feira, 22 de abril de 2010 19:16
    Moderador