none
Como utilizar um método genérico no WCF RRS feed

  • Pergunta

  • Boa tarde.

    Estou precisando de uma ajuda para resolver um problema com método genérico no WCF.

    Eu tenho algumas tabelas no banco de dados que são muito parecidas (os campos são os mesmos).

    Eu quero criar um método que retorne uma lista com os registros dessas tabelas, então resolvi utilizar o recurso genérico. Assim eu vou passar o "tipo" para o método e ele vai me retornar o objeto desejado.

    Na camada de negócios:

     public List<ITabelas> TabelasRetornarRegistros<T>() where T : class, ITabelas
            {
                using (Contexto ctx = new Contexto())
                {
                    return new List<ITabelas>(ctx.Set<T>());
                }
            }

    O tipo ITabelas é uma interface que eu criei e estou utilizando nas classes respectivas.

    Muito bem, na camada de serviço, eu configurei o método assim:

    [ServiceContract]
        public interface IProdutos
        {

            [OperationContract]
            [FaultContract(typeof(ControleErro))]
            List<ITabelas> TabelasRetornarRegistros<T>() where T : class, ITabelas;

    }

    segue a implementação:

    public List<ITabelas> TabelasRetornarRegistros<T>() where T : class, ITabelas
            {
                NT_Produtos tabelas = new NT_Produtos();
                try
                {
                    return tabelas.TabelasRetornarRegistros<T>().ToList();
                }

                catch (Exception e)
                {
                    throw new FaultException(e.Message);
                }
            }

    Até aqui tudo bem, atualizei a referencia do serviço na camada de UI. Porém ao tentar chamar o método lá, estou recebendo este erro:

       private void Atualizar(object sender, RoutedEventArgs e)
            {
                using (srvProdutos.ProdutosClient servico = new srvProdutos.ProdutosClient())
                {
                    var dados = servico.TabelasRetornarRegistros<ProdutoTipoMaterial>();
                }
            }

    ele não entende o <T>, como se o método não tivesse isso na declaração, esta faltando algo na serenização?

    "O método não generico TabelaRetonarRegistros() não pode ser usado com arumentos de tipo"

    terça-feira, 21 de novembro de 2017 18:57

Todas as Respostas

  • Ricardo, verifique se ambos projetos estão compilados com a última versão. Pode ser que tenha dado erro na compilação do projeto WCF e a UI está utilizando a versão anterior.

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 22 de novembro de 2017 11:30