我已经问过一些问题,但仍然没有完全答案,所以这里是一个更简单的问题。

考虑一下。我有2个接口。一个人描述了一个dao。一个是WCF接口。WCF接口继承DAO接口,以便通过WCF属性公开其方法。因为它是一个WCF接口,我当然必须再次声明方法,以便在诸如[操作组织]之类的WCF属性上放置WCF属性。因此,我生效隐藏了先前的接口方法,并必须将“新”关键字放在它们上。这是在这种情况下正确的事情。我需要能够通过WCF界面呈现DAO接口方法,因此继承它的原因。我想强制WCF接口让这些函数暴露。似乎我的手相当捆绑,我必须使用这种方法来获得暴露的方法,但您觉得怎么样?

在代码项中,它看起来像这样:

//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();  
    }
}
.

有帮助吗?

解决方案

使用2个接口 - 不要为DAO和WCF合同共享一个界面

包括通过WCF服务呼叫传递给DAO的包装器。

所以例如,如果您的DAO具有以下方法:

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

您可以使用相同的签名进行操作合同:

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

然后您有一个包装类:

public class MyWCFService : IMyWCFContract
{
     private MyDAO dao;

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

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

可以考虑使用a RESTFUL 服务代替。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top