Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Erro ao consumir webservice e exibir no browser

Olá pessoal, pesquisei em todo lugar mas não encontro resposta, se alguem poder me ajudar.

Em uma aplicação ASP NET que consumo um webservice WCF SOAP, em uma delas vem uma resposta gigante que preciso exibir na tela pro usuario, tive que colocar essa propriedade no webconfig maxReceivedMessageSize="1000000", ai beleza passou, só que agora no console do navegador exibe esse erro quando leio em javascript:

Obs: para respostas mais curtas não dava esse problema

Localizador.aspx:171 POST http://dominio.com/projeto/Localizador.aspx/LocalizadorPj 500 (Internal Server Error)
executeRequest @ ScriptResource.axd:5
executeRequest @ ScriptResource.axd:5
invoke @ ScriptResource.axd:5
Sys.Net.WebServiceProxy.invoke @ ScriptResource.axd:5
_invoke @ ScriptResource.axd:5
LocalizadorPj @ Localizador.aspx:171
PageMethods.LocalizadorPj @ Localizador.aspx:230
LocalizadorPj @ localizador.js:1007
localizador @ localizador.js:117
onsubmit @ Localizador.aspx:105
_onFormSubmit @ ScriptResource.axd:5
(anonymous) @ ScriptResource.axd:5
b @ ScriptResource.axd:5
8 respostas

Lucas, se deu um erro 500, é porque gerou uma exceção no código C#. Tenta ver se consegue logar esse erro. Coloca aqui a mensagem de erro para ajudarmos na solução!

Daniel, tudo bem?

Obrigado pela resposta, eu debugei a aplicação de novo passo a passo e não consegui encontrar o problema no código c#, até pq como eu disse antes o erro era no back mesmo, ai pesquisei e coloquei o atributo maxReceivedMessageSize="1000000" no webconfig , e passou. Agora na hora de consumir essa resposta no javascript acontece esse erro que enviei no console, não faço ideia do que pode ser, se é em algum tamanho definido no protocolo http, ou seila...

Já pesquisei em todo lugar, se conseguir me ajudar ai agradeço!

Oi, Lucas, pode colocar o código que está consumindo o web service, juntamente com o Web.config?

Segue o código:

JavaScript:

function LocalizadorPj(cnpj) {
    cnpj = String(cnpj);
    if (cnpj.length < 14) 
        cnpj = validaCpfCnpj(cnpj);

    doc = String(cnpj);
    swal({
        title: "Localizando dados...",
        text: textoSwal,
        allowOutsideClick: false,
        showCancelButton: false,
        showConfirmButton: false,
        allowEscapeKey: false,
        html: true
    });

    PageMethods.LocalizadorPj(cnpj, sucessLocalizadorPj, errorLocalizadorPj);

    $('#liLocalizacao').addClass('active');
}

c#:

[WebMethod]
    public static string LocalizadorPj(string cnpj)
    {
        string pj = string.Empty;

        Recupera.WsRecupera.Login dadosAcesso = new Recupera.WsRecupera.Login();
        dadosAcesso.Usuario = usuario.NomeUsuario;
        dadosAcesso.Senha = usuario.Senha;
        dadosAcesso.Cliente = usuario.NomeCliente;

        RecuperaSoapClient ws = new RecuperaSoapClient("RecuperaSoap");

        pj = ws.LocalizadorPj(dadosAcesso, cnpj, Recupera.Login.ID_PRODUTO);

        return pj;
    }

webconfig:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="RecuperaSoap" maxReceivedMessageSize="1000000" sendTimeout="00:10:00"/>
      </basicHttpBinding>
    </bindings>

Se precisar de mais alguma coisa, ou dúvida no código me fala, valeu!

Este é um caso especifico que normalmente não acontece, mas para um certo cadastro que busco aqui, ele retorna muitos dados, e de início penso que está estourando o limite de dados em algum ponto

Lucas, pesquisando no StackOverflow achei dois tópicos parecidos com o seu. Estão em inglês, olha aqui:

A diferença que vi na configuração do binding é que o tamanho é maior, além de existir mais parâmetros. Abaixo o exemplo que copiei de lá. Veja se é útil pra você:

<bindings>
  <basicHttpBinding>
    <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
        maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    </binding>
  </basicHttpBinding>
  <webHttpBinding>
    <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
  </webHttpBinding>
</bindings>

As duas soluções mais votadas atestam que é para remover o nome do binding para que a configuração se aplique a todos os endpoints. Veja:

If I remove the name attribute from my binding tag and the bindingConfiguration attribute from my endpoint tag it all works. This means that the basicHttpBinding configuration is the default configuration for all basicHttpBinding endpoints

Me dá um feedback, por favor!

Daniel, creio que estamos quase lá... Mas na verdade não mudou nada, eu fiz o que essas respostas dizem e nada, olha:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
        </binding>
      </basicHttpBinding>
      <webHttpBinding>
        <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
      </webHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://endereco/Enriquecimento.asmx" binding="basicHttpBinding" name="EnriquecimentoSoap" contract="WsEnriquecimento.EnriquecimentoSoap" />
      <endpoint address="http://endereco/Recupera.asmx" binding="basicHttpBinding" name="RecuperaSoap" contract="WsRecupera.RecuperaSoap" />
    </client>
  </system.serviceModel>

Estranho não funcionar ainda, no PageMethods ( PageMethods.LocalizadorPj(cnpj, sucessLocalizadorPj, errorLocalizadorPj); ) e esta retornando o método de erro (errorLocalizadorPj)

solução!

Consegui resolver, é aquela velha historia com uma coisa simples se resolveu o problema rsrs. Para aqueles que tenham a mesma dúvida que eu, adicionei essa configuração no web.config para respostas em JSON:

<system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="1000000"/>
      </webServices>
    </scripting>
  </system.web.extensions>