none
Debug WCF sendo chamado dentro do get de uma propriedade RRS feed

  • Pergunta

  • Tenho uma classe "Genero" que possui dentro dela uma propriedade "List<Musicas>".

    Ao chamar o serviço ele me retorna o Genero corretamente com o ID e o Nome, e a lista de músicas é nula, pois só carrego ela no get da propriedade, fazendo outra chamada ao serviço para que ele retorna a lista de músicas.

    Tudo funciona perfeitamente exceto quando estou depurando a aplicação e uso o Quick Watch para ver o valor das propriedades da classe Genero. Por algum motivo a lista de música não é carregada, dá timeout e depois dela todas as outras propriedades do Genero também não são carregadas.

    Exsite algum jeito para fazer o debug funcionar corretamente nesse caso?
    sexta-feira, 12 de março de 2010 11:32

Todas as Respostas

  • Boas rarrosi,

    Não sei se entendi bem. No teu serviço (Servico01) você tem uma classe e dentro do blogo get de uma propriedade você chama um outro serviço (Servico02)?

    No cliente você tem referenciado o Servico01?
    http://www.israelaece.com
    sexta-feira, 12 de março de 2010 12:19
    Moderador
  • Na verdade só tenho um serviço. 
    Vou explicar melhor.

    Tenho o serviço Service1 e tenho uma aplicação cliente que referência o Service1.

    Nesta aplicação cliente tenho uma classe chamada Genero que possui as propriedades ID, Nome, Musicas.
    A propriedade Musicas é um List<Musica> sendo que Musica é outra classe que está na aplicação cliente.

    Na aplicação cliente tenho um WinForm com um botão, quando clico neste botão ele instancia uma classe Genero e acessa o Service1 para carregar a classe Genero.
    A classe Genero retornada pelo Service1 contém o ID e o Nome, a lista de músicas (propriedade Musicas) não vem do serviço neste momento.

    Ao acessar o get da propriedade Musicas da class Genero é feito um outro acesso ao mesmo Service1 para que ele retorne a lista de músicas.

    Tudo isso funciona legal, o problema é que quando eu estou depurando e uso o Quick Watch do Visual Studio para ver os valores da classe Genero (o que faz com que a propriedade Musicas seja acessada) parece que a chamada ao Service1 dentro do get da propriedade não retorna, o que causa timeout do Quick Watch.

    Vai ai o código da classe Genero:

        public class Genero
        {       
            private GeneroDTO _generoDTO = new GeneroDTO();
            private List<Musica> _musicas = null; 
    
            public Genero() { }
    
            public Genero(int GeneroId) 
            { 
                this._generoDTO = ServiceProxy.Load<GeneroDTO>(GeneroId);
            }
            
            internal Genero(GeneroDTO _generoDTO) 
            { 
                this._generoDTO = _generoDTO;
            }
    		
            public virtual int GeneroId
            {            
                get 
                { 
                    return _generoDTO._generoId; 
                }
    	    set	
                { 
                    _generoDTO._generoId = value; 
                    _musicas = null;
                }
            }
            
    	public virtual string Name
            {            
                get 
                { 
                    return _generoDTO._name; 
                }
    	    set	
                { 
                    _generoDTO._name = value; 
                }
            }
            
            public virtual List<Musica> Musicas
            {
                get 
                { 
                    if (_musicas == null)
                    {
                        _musicas = ServiceProxy.LoadMusicasByGenero(GeneroId);
                    }
                    return _musicas; 
                }            
            }
        }
    sexta-feira, 12 de março de 2010 12:39
  • Boas rarrosi,

    Tem a exceção toda/stack trace?
    http://www.israelaece.com
    sexta-feira, 12 de março de 2010 15:04
    Moderador
  • Mas é que o Visual Studio não gera nenhuma exceção.

    O que acontece é que quando eu seleciono a váriavel e entro na janela de QuickWatch (Shift + F9) e depois clico no '+' para ver os valores da váriavel, a propriedade Musicas, que é a que acessa o Service1 para ser carregada, não retorna e acontece o timeout. O timeout não é causado pela demora do retorno da função que carrega as musicas já que no serviço não é logada nenhuma atividade referente a ação de carregar as musicas

    Segue o link com o print da tela do QuickWatch para mostrar o que ocorre. 
    • Editado rarrosi sexta-feira, 12 de março de 2010 21:01
    sexta-feira, 12 de março de 2010 17:46
  • Boas rarrosi,

    Infelizmente não sei te dizer exatamente o que pode estar acontecendo. Não sei se há um comportamento diferenciado quando você tem o debugger vinculado.


    http://www.israelaece.com
    sexta-feira, 12 de março de 2010 18:03
    Moderador
  • Prezado,

    Alguma novidade quanto a essa sua dúvida?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 18 de março de 2010 22:56
    Moderador