質問

これに関連した質問に尋ねましたが、それでも決定的な答えがないので、ここでより簡単な質問です。

これを検討してください。私は2つのインターフェースを持っています。DAOを説明しています。1つはWCFインターフェースです。WCFインタフェースは、そのメソッドをWCF属性で公開するためにDAOインターフェイスを継承します。WCFインタフェースであるため、[OperationContract]などのWCF属性をそれらに配置するために、もちろん方法を再度宣言してください。その結果、私は前のインターフェースメソッドを隠すことができ、 'new'キーワードをそれらに配置する必要があります。これはこの状況でやるべき正しいことです。私は、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契約に1つのインターフェースを共有しないでください

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

代替計画は、 respful サービス。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top