none
Contratos Tipados RRS feed

  • Pergunta

  • Bom Dia a todos,

    estou em meio a um projeto no qual estou usando WCF para comunicação entre a Aplicação principal e os módulos de funcionalidades. Sei que não é obrigatório o uso de Contratos mas para mim é um tanto quanto útil, existem muitas funcionalidades comuns entre os diversos serviçoes dos diversos módulos.

    tentei criar um Contrato Tipado pelas classes de dominio, mas não consegui, logo se eu criar um contrato especifico para cada serviço funciona normalmente. Percebi que isso se da por causa do generics mesmo..

    Existe uma forma que eu consiga Tipar o meu contrato para facilitar o meu desenvolvimento?

    agradeço
    quinta-feira, 11 de março de 2010 14:42

Respostas

  • Boas Marcos,

    Como a interface do contrato é genérica, você precisa informar isso também quando define no arquivo de configuração. Suponhamos que temos a interface IContrato<T> e a classe Cliente:

    public class Cliente
    {
        public string Nome { get; set; }
    }

    [ServiceContract]
    public interface IContrato<T>
    {
        [OperationContract]
        T Ping(T value);
    }

    public class Servico : IContrato<Cliente>
    {
        public Cliente Ping(Cliente value)
        {
            return value;
        }
    }

    O arquivo de configuração deve ficar:

    <endpoint
        name="..."
        binding="..."
        contract="TeuNamespace.IContrato`1[[TeuNamespace.Cliente, NomeDoAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" />


    http://www.israelaece.com
    quinta-feira, 11 de março de 2010 15:56
    Moderador

Todas as Respostas

  • Israel,

    Pelo que eu entendi, o artigo que você me enviou descreve as dificuldades em trafegar ex: collection tipada no processo de consumo de um serviço WCF..

    Essa talvez seria uma dúvida que eu esclareceria mais pra frente, mas ja imaginava que não seria comum pelo fato de não se tratar necessariamente de aplicações com a mesma tecnologia.

    A minha dúvida é antes disso no momente de criar um serviço e seu contrato, gostaria que meu contrato fosse único e de forma genérica estivesse atribuindo com quem ele estaria trabalhando.

    ex:

    public interface IContract<T>{}

    e no momento de criar a classe que iria implementar tão Contrato

    public class UsuarioService : IContract<ECUsuario>



    A Exceção que é lançada diz que meu contrato não pode ser encontrato e eu acredito que não será nunca pois no Web.config o endpoint especéfico desse servico não me permite passar a tipagem, somente o contrato, logo não poderá criar um vinculo do servico com o contrato específico

    quinta-feira, 11 de março de 2010 15:23
  • Boas Marcos,

    Como a interface do contrato é genérica, você precisa informar isso também quando define no arquivo de configuração. Suponhamos que temos a interface IContrato<T> e a classe Cliente:

    public class Cliente
    {
        public string Nome { get; set; }
    }

    [ServiceContract]
    public interface IContrato<T>
    {
        [OperationContract]
        T Ping(T value);
    }

    public class Servico : IContrato<Cliente>
    {
        public Cliente Ping(Cliente value)
        {
            return value;
        }
    }

    O arquivo de configuração deve ficar:

    <endpoint
        name="..."
        binding="..."
        contract="TeuNamespace.IContrato`1[[TeuNamespace.Cliente, NomeDoAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" />


    http://www.israelaece.com
    quinta-feira, 11 de março de 2010 15:56
    Moderador
  • Exato!

    Como havia dito eu sabia que o problema era no config pois não tinha vinculo com o meu contrato..

    Mas perfeito é exatamente isso que eu não estava sabendo fazer, referenciar a tipagem no config...

    Valeu Israel a atenção..

    abs.
    quinta-feira, 11 de março de 2010 17:39