none
The remote server returned an error: NotFound + WebService + Silverlight (Base em ambiente externo ao da aplicação) RRS feed

  • Pergunta

  • Tenho uma estrutura da aplicação assim:

    1 - FrontEnd Silverlight (locaweb)
    2 - SGBD PostgreSQL (servidor, Hardware, externo à Locaweb) 

    Estou fazendo um simples Select de login que retorna apenas um registro para identificar se o usuário/senha informado estão corretos e está gerando este erro, o que pode ser? Meu arquivo ServiceReference está assim:

            <binding name="wsUsuarioSoap" maxBufferSize="2147483647" closeTimeout="00:30:00" openTimeout="00:30:00"
                 maxReceivedMessageSize="2147483647">
              <security mode="None">
                <transport>
                  <extendedProtectionPolicy policyEnforcement="Never" />
                </transport>
              </security>
            </binding>
    
    No web.config dos webservices tenho esta linha também, <httpRuntime executionTimeout="600" enable="true" maxRequestLength="16384"/>

    Abaixo detalhe do retorno do erro.

    The remote server returned an error: NotFound

    System.ServiceModel.CommunicationException was unhandled by user code

      Message=The remote server returned an error: NotFound.

      StackTrace:

           em System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)

           em System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)

           em System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)

           em AdvogawebWCF.wsUsuario.wsUsuarioSoapClient.wsUsuarioSoapClientChannel.Endlogar(IAsyncResult result)

           em AdvogawebWCF.wsUsuario.wsUsuarioSoapClient.AdvogawebWCF.wsUsuario.wsUsuarioSoap.Endlogar(IAsyncResult result)

           em AdvogawebWCF.wsUsuario.wsUsuarioSoapClient.Endlogar(IAsyncResult result)

           em AdvogawebWCF.wsUsuario.wsUsuarioSoapClient.OnEndlogar(IAsyncResult result)

           em System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)

      InnerException: System.Net.WebException

           Message=The remote server returned an error: NotFound.

           StackTrace:

                em System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)

                em System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)

                em System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)

           InnerException: System.Net.WebException

                Message=The remote server returned an error: NotFound.

                StackTrace:

                     em System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)

                     em System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)

                     em System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState)

                InnerException: 


    Guilherme Carvalho
    quinta-feira, 4 de agosto de 2011 22:45

Respostas

  • Eu não uso WCF. Mas estou desconfiado que seja problema de configuração no arquivo pg_hba do banco de dados no cliente, pois estou recebendo a mensagem de retorno do PostgreSQL:

    codigo 28000 mensagem fatal: 28000: autenticação do tipo password falhou para usuário "xxxxxx" detalhe  comando sql.


    Guilherme Carvalho
    quinta-feira, 25 de agosto de 2011 15:06

Todas as Respostas

  • Amigo,

    Este erro :

    The remote server returned an error: NotFound

    Pelo andei pesquisando na internet pode ser causado por diversas coisas. Você tera que monitorar as requisições do cliente para o servidor.


    Milton
    sexta-feira, 5 de agosto de 2011 12:21
  • Guilherme bom dia.

    Bom pelo que entendi você esta utilizando WCF para consultar o valor no banco, faça as seguintes verificações:

    * Seu endereço de EndPoint no Client esta configurado corretamente, tente chamar direto no Browser seu endereço do web-services ou tente acessar via WCFTestClient;

    * Você esta utilizando WSHttpBinding ou BasicHttpBinding, caso seja WSHttpBinding troque por BasicHttpBinding ou CustomBinding. O Silverlight não suporta WshttpBinding, veja o Link : http://msdn.microsoft.com/en-us/library/cc896571(v=VS.95).aspx

    * Outra coisa que pode estar causando problema é esta configuração: <extendedProtectionPolicy policyEnforcement="Never" />. (Remova do webconfig)

     

    Espero ter ajudado.

    sexta-feira, 5 de agosto de 2011 12:30
  • Creio não ser este o problema, porque se eu mudar de base e apontar para uma base de dados na estrutura da Locaweb funciona tranquilamente. Se rodar na máquina local apontando para uma base na Locaweb também funciona.
    Guilherme Carvalho
    sexta-feira, 5 de agosto de 2011 17:41
  • Guilherme,

     

    Esse erro só é disparado quando você está executando a aplicação no ambiente da locaweb?

     

    Esse erro é realmente "genérico", existe um outro problema. Você já tentou consumir esse webservice por outras fontes?

     

    Obrigado.

    sexta-feira, 5 de agosto de 2011 17:57
  • Creio que o "problema" seja o tempo de resposta, porque verifiquei que na rota são perdidos pacotes quando executo um tracert. Se eu apontar para uma base na locaweb mesmo não gera o erro e a aplicação funciona normalmente.
    Guilherme Carvalho
    quinta-feira, 11 de agosto de 2011 17:17
  • Já tentou aumentar o timeout?

     

    Abraço

    quinta-feira, 11 de agosto de 2011 17:44
  • Você diz o timeout no webconfig do projeto dos serviços, se for este sim, fiz assim.

     

    httpRuntime executionTimeout="900" enable="true" maxRequestLength="16384"/


    Guilherme Carvalho
    terça-feira, 16 de agosto de 2011 23:22
  • Quando "rodo" a aplicação no mesmo ambiente, tanto banco como client na Locaweb funciona sem problema, agora quando coloco o banco externo aí o bicho pega.

    Guilherme Carvalho
    terça-feira, 16 de agosto de 2011 23:24
  • Olá, Guilherme

    Como ninguem mencionou isso , gostaria de lhe dar uma sugestão , não sei se você já tentou colocar os arquivos de clientacesspolicy.xml e crossdomain.xml de acordo com seu tipo de rede e conexão veja http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx  entenda melhor http://msdn.microsoft.com/en-us/library/cc838250(v=vs.95).aspx e sobre tipos de restrições http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx .

    Espero ter ajudado.


    Américo Arvani
    MCP Frw web 2.0 / MCPD (Enterprise Application Developer) Frw web/win/wcf 3.5
    Se ajudou , marque como resposta.
    http://americoarvani.blogspot.com
    View Americo Arvani's profile on LinkedIn
    sexta-feira, 19 de agosto de 2011 00:09
  • O meu arquivo clientaccessplicy está assim: <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="*"> <domain uri="*" /> </allow-from> <grant-to> <resource path="/" include-subpaths="true" /> </grant-to> </policy> </cross-domain-access> </access-policy>

     

    Entretanto meu problema é apenas a comunicação entre o serviço e o banco, tanto que como expliquei acima, se colocar a base de dados na mesma estrutura (Locaweb) o problema não ocorre, ou seja ao mudar apenas a base de lugar o problema aparece.


    Guilherme Carvalho

    sexta-feira, 19 de agosto de 2011 14:08
  • Guilherme boa tarde.

    Deixa ver se eu entendi. Se você rodar toda sua aplicação dentro do ambiente da localweb funciona sem problema nenhum, entrentanto se você colocar a base em outro lugar fora da localweb o sistema apresenta erro, é isso? Sua comunicação entre o banco e o aplicação cliente esta sendo realizada via WCF, correto?
    Quando você coloca o banco para o servidor fora da localweb você coloca em conjunto os serviços do WCF, correto? Desta forma sua estrutura ficaria assim

    Servidor 1 - Banco + Serviços WCF - (Fora LocalWeb)

    Servidor 2 - Aplicação Silverlight - (Dentro LocalWeb).

    ?

    sexta-feira, 19 de agosto de 2011 16:56
  • A Estrutura é assim:

    Servidor 1 - Banco de dados (Fora Locaweb)

    Servidor 2 - Aplicação Silverlight e WebServices (Locaweb) não utilizo WCF.


    Guilherme Carvalho
    sábado, 20 de agosto de 2011 18:18
  • Guilherme boa noite.
    Qual a forma de comunicação que você esta utilizando entre o banco e a aplicação silverlight, pois se o web-services esta dentro do servidor da localweb e o banco esta fora da localweb, este web-service não vai conseguir enxergar este banco, a não ser que exista um link dedicado realilzando a comunicação entre esses dois servidores.

    Agora se você estiver tentando acessar os dados do banco com o web-services, e estes servidores não fazem parte da mesma rede, você vai ter que transferir seu web-services para o servidor onde esta o banco de dados.

    quarta-feira, 24 de agosto de 2011 01:39
  • Mas existem sim links dedicados, inclusive a conexão eu faço via IP para o banco de dados, creio não ser este o problema porque quando rodo localmente e conecto à base o sistema funciona.
    Guilherme Carvalho
    quarta-feira, 24 de agosto de 2011 14:19
  • Bom então vamos por etapa.
    O sistema apresenta alguma mensagem de erro?

    Tente ativar alguma forma de gerar log através das Exceptions, com o bloco (Try/Catch);

    Você pode utilizar o Fiddler essa é uma ferramenta gratuíta de proxy que coleta todas as informações que passam pelo browser.

    Entretanto isso esta parecendo falha na conexão com o banco, você pode testar isso com ODBC, na maquina onde esta o Web-Services crie uma nova conexão via ODBC apontando para o banco que esta fora da localweb com o mesmo usuário e senha utilizados pelo web-services, no final da configuração o ODBC pede para testar a conexão.

    quarta-feira, 24 de agosto de 2011 19:04
  • Bom Dia,

    Guilherme.

     

    Já tentou habilitar o trace do WCF na sua aplicação com ele você vai ter o real retorno do seu WCF muito alem do "The remote server returned an error: NotFound.", nesse link http://www.israelaece.com/post/WCF-Tracing.aspx tem post de como fazer isso.

     

    segue a configuração pronta.

     <system.diagnostics>
      <sources>
       <source name="System.ServiceModel.MessageLogging"
         switchValue="All">
        <listeners>
         <add name="xml"
         type="System.Diagnostics.XmlWriterTraceListener"
         initializeData="wcf_scart.svclog" />
        </listeners>
       </source>
      </sources>
      <trace autoflush="true" />
     </system.diagnostics>
    
     <system.serviceModel>  
      <diagnostics>
       <messageLogging logEntireMessage="true" maxMessagesToLog="300"
              logMessagesAtServiceLevel="false"
              logMalformedMessages="true"
              logMessagesAtTransportLevel="true"/>
      </diagnostics>
    
     </system.serviceModel>
    
    att.

    quinta-feira, 25 de agosto de 2011 14:33
  • Eu não uso WCF. Mas estou desconfiado que seja problema de configuração no arquivo pg_hba do banco de dados no cliente, pois estou recebendo a mensagem de retorno do PostgreSQL:

    codigo 28000 mensagem fatal: 28000: autenticação do tipo password falhou para usuário "xxxxxx" detalhe  comando sql.


    Guilherme Carvalho
    quinta-feira, 25 de agosto de 2011 15:06
  • Confirmada a suspeita. era o arquivo pg_hba barrando o acesso. 
    Guilherme Carvalho
    segunda-feira, 29 de agosto de 2011 11:08