Usuário com melhor resposta
Contratos Tipados

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- Tipo Alterado AndreAlvesLimaModerator sábado, 13 de março de 2010 18:22
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- Marcado como Resposta AndreAlvesLimaModerator sábado, 13 de março de 2010 18:22
Todas as Respostas
-
Boas Marcos,
Seria isso: http://www.israelaece.com/post/Utilizando-Generics-em-Servicos.aspx?
http://www.israelaece.com -
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
-
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- Marcado como Resposta AndreAlvesLimaModerator sábado, 13 de março de 2010 18:22
-