Pergunta

Eu tenho algumas perguntas relacionadas a isso, mas ainda não há respostas conclusivas então, aqui está a mais simples pergunta.

Considere isso.Eu tenho 2 interfaces.Um descreve um dao.É um wcf interface.O wcf interface herda a interface dao para expor seus métodos com o wcf atributos.Porque ele é um wcf interface I, naturalmente, deve declarar os métodos de novo para colocar o wcf atributos, tais como [OperationContract].Como resultado, eu estou em vigor escondendo anterior interfaces de métodos e deve colocar o 'novo' palavra-chave sobre eles.Esta é a coisa correta a se fazer nessa situação.Eu preciso ser capaz de apresentar a interface dao métodos, através do wcf interface daí o motivo para herdá-la.Eu quero forçar o wcf interface para ter estas funções expostas.Parece que minhas mãos são bastante amarrado e que devo utilizar esta abordagem para obter os métodos expostos, mas o que você acha?

Em termos de código, ele seria parecido com este:

//The dao interface
public interface IMyDao
{
    void Foo();
}

//The wcf interface which implements/extends the IMyDao interface in order to add wcf attributes
[ServiceContract]
public interface IMyWCF : IMyDao
{
    [OperationContract]
    new void Foo();
}

//The dao class that implements the dao interface
public class MyDao : IMyDao
{
    public void Foo()
    {
        //Do something
    }
}

//The class implements the wcf interface. Makes calls to the dao.
public class MyWCF : IMyWCF
{
    public void Foo()
    {
        MyDao myDao = new MyDao();

        myDao.Foo();  
    }
}
Foi útil?

Solução

Use 2 interfaces - não compartilhar de uma interface para um DAO e um WCF contrato

Inclui um invólucro que passa através das chamadas de serviço do WCF para o DAO.

Assim, por exemplo, se o seu DAO tem o seguinte método:

public interface IMyDAO
{
    MyObject GetMyObjectById(int Id);
}

Você gostaria de ter sua Operação de contrato com a mesma assinatura:

public interface IMyWCFContract 
{
    [OperationContract]
    MyObject GetMyObjectById(int Id);
}

E então você gostaria de ter uma classe de wrapper:

public class MyWCFService : IMyWCFContract
{
     private MyDAO dao;

     public MyWCFService()
     {
        dao = new MyDAO(); 
     }

     public MyObject GetMyObjectById(int id)
     {
        return dao.GetMyObjectById(id);
     }
}

Um plano alternativo pode ser considerar o uso de um RESTFUL serviço.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top