locked
Consumir serviço WCF em aplicação Silverlight | The remote server returned an error: NotFound. RRS feed

  • Pergunta

  • Estou consumindo um serviço WCF que está assim http://tinyurl.com/yhxf2ur  a função cadastrarPrazo tem como parâmetro um objeto do tipo clPrazo que está declarado logo abaixo. Quando eu tento executar a função que consume este serviço eu recebo de retorno um erro The remote server returned an error: NotFound. Já li em alguns posts/foruns que se estiver utilizando linq to SQL tem que fazer uma configuração a mais, entretanto como pode ser conferido no serviço eu estou apenas verificando o tamando do atributo titulo e retornando o tamanho. Se eu fizer uma troca no serviço mudando o tipo do parâmetro para um string por exemplo ele funciona tranquilamente.

    A declaração por completo do serviço está aqui http://tinyurl.com/yk5j924   e a Class Prazo aqui http://tinyurl.com/yz6jchj

    Obs.: Eu não coloquei o código aqui por causa da formatação.



    Guilherme Carvalho
    quarta-feira, 25 de novembro de 2009 13:53

Respostas

  • public string descricao
                {
                    get { return Descricao; }
                    set
                    {
                        if (value.Length == 0) // Se value == null vai dar uma exception aqui
                            Descricao = "Descrição não informada.";                   
                        else
                            Descricao = value;
                    }
                }


    o certo é String.IsNullOrEmpty(value)
    What would Brian Boitano do ?
    quinta-feira, 26 de novembro de 2009 19:19

Todas as Respostas

  • Olá Guilherme

    Não entendei por que a classe prazo herda de clprazo. Acho q vc não deveria fazer isso. Deve estar causando algum conflito, pois a classe prazo define seu contrato de serviço (possui o atributo ServiceContract), e a classe clprazo por sua vez é um contrato de dados (DataContract). Isso não faz sentido. Principalmente por que os métodos do serviço que dependem da classe clprazo recebem um objeto desse tipo como parâmetro.

    Elimine esta herança e veja se funcione.

    Breno

    Se respondi sua pergunta, por favor, "Marque como Resposta"

    http://brenocferreira.spaces.live.com/
    quarta-feira, 25 de novembro de 2009 18:24
  • Na verdade Breno eu tirei mesmo, a classe agora está assim http://tinyurl.com/yjzxehn mas mesmo assim gera o erro.

    Guilherme Carvalho
    quarta-feira, 25 de novembro de 2009 19:20
  • Guilherme, o silverlight sempre retorna um erro "NotFound"  quando ocorre uma Exception no service independente de qual seja...

    vc vai ter q debugar o seu service e ver qual é o erro de verdade q ta acontecendo...

    pessoalmente eu mantenho uma variavel na sessão do webservice com a mensagem do ultimo erro ocorrido e vo buscar essa informacao sempre que me da esse erro para saber qual é
    What would Brian Boitano do ?
    quarta-feira, 25 de novembro de 2009 23:35
  • Vc poderia me dar um exemplo de como eu posso fazer este tratamento via sessão no serviço, eu realmente estou utilizando um Serviço WCF e não um webservice.
    Guilherme Carvalho
    quinta-feira, 26 de novembro de 2009 00:02
  • voce pode usar o HttpContext.Current.Session para acessar a sessão (em teoria... pq na pratica eu confesso q nao testei)

    mas a ideia basica eh gravar o ultimo erro em algum lugar e criar um metodo para consulta esse erro depois

    ai no MetodosCompleted vc faria algo tipo


    if (e.Error != null) {
        // Chama o metodo para pegar o ultimo erro do WCF
       return;
    }




    What would Brian Boitano do ?
    quinta-feira, 26 de novembro de 2009 00:31
  • da uma olhada aqui http://msdn.microsoft.com/en-us/library/ms733040.aspx
    What would Brian Boitano do ?
    quinta-feira, 26 de novembro de 2009 00:35
  • Creio que o grande problema esteja aqui

    [OperationContract]
            public int cadastrarPrazo(string titulo, string descricao)

    porque eu fiz uma mudança apenas na declaração da função mudando a declaração do parâmetro que antes era um objeto da classe Prazo e agora são dois parâmetros do tipo String, e funcionou tranquilo tranquilo, será que estou fazendo tudo certo, ou falta algo? Apenas para recordar as declarações da classe prazo [1], do serviço[2]

    [1] http://tinyurl.com/yz6jchj
    [2] http://tinyurl.com/yk5j924

    P.S. Dowhile, realmente muito interessante os dois tutoriais, entretando não utilizo linq to SQL porque meu SGBD é PostgreSQL.
    Guilherme Carvalho
    quinta-feira, 26 de novembro de 2009 10:49
  • Tem algo realmente muito estranho, continuando os testes eu declarei uma outra função [1] privada, que recebe como parâmetro um objeto do tipo clPrazo, minha classe já declara. A outra função que eu chamo do silverlight está chamando esta nova função e ficou assim [2], nesta fução eu agora crio uma instância da classe clPrazo e depois chamo a nova função privada e funciona tranquilamente.

    Claro que eu não posso trabalhar assim porque quero passar os parâmetros como objetos mesmo para as funções do serviço, mas de qualquer maneira acho que ajuda em algo.

    [1] http://tinyurl.com/ygdu6vr
    [2] http://tinyurl.com/ydl9kza


    Guilherme Carvalho
    quinta-feira, 26 de novembro de 2009 11:03
  • So um detalhe... o seus objetos sao Serializaveis ?
    What would Brian Boitano do ?
    quinta-feira, 26 de novembro de 2009 18:20
  • Sim são, veja abaixo. O que eu achei mais estranho foi que para fazer uma última tentativa eu fiz assim:

    Na função do meu serviço eu criei uma nova instância da classe clPrazo que recebe o parâmetro da função e aí funcionou tranquilamento, claro que isto é totalmente errado porque se o meu parâmetro já é a instância da classe eu não precisaria de outra instância para tratar os dados, a função do meu serviço ficou algo assim:

    [OperationContract]
            public int cadastrarPrazo(clPrazo prazo)
            {
                clPrazo instPrazo = prazo;
                try
                {
                    ...
                 }
             }


    Código da classe clPrazo.
    using System.Runtime.Serialization;
     
    namespace AdvogawebSOA.code
    {
        [DataContract]
        public class clPrazo
        {
                private string Titulo;
                private string Descricao;
     
                [DataMember]
                public int idPrazo { get; set; }
     
                [DataMember]
                public string titulo
                {
                    get { return Titulo; }
                    set
                    {
                        if (value.Length == 0)
                            Titulo = "Título não informado.";
                        else
                            Titulo = value;
                    }
                }
     
                [DataMember]
                public string descricao
                {
                    get { return Descricao; }
                    set
                    {
                        if (value.Length == 0)
                            Descricao = "Descrição não informada.";                    
                        else
                            Descricao = value;
                    }
                }
        }
    }
    
    

    Guilherme Carvalho
    quinta-feira, 26 de novembro de 2009 18:28
  • public string descricao
                {
                    get { return Descricao; }
                    set
                    {
                        if (value.Length == 0) // Se value == null vai dar uma exception aqui
                            Descricao = "Descrição não informada.";                   
                        else
                            Descricao = value;
                    }
                }


    o certo é String.IsNullOrEmpty(value)
    What would Brian Boitano do ?
    quinta-feira, 26 de novembro de 2009 19:19