2016-08-12 8 views
2

私はWCFを初めて使用しており、DBへのAPIを作成したいと考えています。WCFの多くのインターフェイスを返します

DB ormはEntityFrameworkによって構築されています。取得する関数、取得する関数、保存する関数、および各エンティティで実装する必要があるすべての関数をラップしました。

WCFサービスは1つのインターフェイスしか読み込めないことがわかりましたが、多くのインターフェイスがあり、各インターフェイスは複数のクラスによって実装されています。

私の主なインターフェース:

[DataContract] 
public enum Entity 
    { 
     [EnumMember] 
     Branch, 
     [EnumMember] 
     Category, 
     [EnumMember] 
     Client, 
     [EnumMember] 
     ClientInterest, 
     [EnumMember] 
     Condition, 
     [EnumMember] 
     Event, 
     [EnumMember] 
     EventType, 
     [EnumMember] 
     Floor, 
     [EnumMember] 
     GlobalSettings, 
     [EnumMember] 
     Operation, 
     [EnumMember] 
     Picture, 
     [EnumMember] 
     Price, 
     [EnumMember] 
     Rate, 
     [EnumMember] 
     RealEstate, 
     [EnumMember] 
     Role, 
     [EnumMember] 
     Sale, 
     [EnumMember] 
     Status, 
     [EnumMember] 
     User   
    } 

    [DataContract] 
    public enum Hierarchy 
    { 
     [EnumMember] 
     Realtor, 
     [EnumMember] 
     Branch, 
     [EnumMember] 
     Chain, 
     [EnumMember] 
     NonRelevant 
    } 

    [ServiceContract] 
    public interface IBL 
    { 
     [OperationContract] 
     Dictionary<string, string> AuthenticateUser(string username, string password); 
     [OperationContract] 
     string GetLoggedUserUsername(); 
     [OperationContract] 
     string GetLoggedUserBranchName(); 
     [OperationContract] 
     void DisconnectUser(); 

     [OperationContract] 
     IBLManage GetBLManage(Entity entity); 
     [OperationContract] 
     IBLReport GetBLReport(Entity entity); 
     [OperationContract] 
     IBLSearch GetBLSearch(Entity entity); 

     [OperationContract] 
     List<string> GetRoles(Dictionary<string, string> errorsDict); 
     [OperationContract] 
     List<string> GetEventTypes(Dictionary<string, string> errorsDict); 
     [OperationContract] 
     List<string> GetConditions(Dictionary<string, string> errorsDict); 
     [OperationContract] 
     List<string> GetStatuses(Dictionary<string, string> errorsDict); 
     [OperationContract] 
     List<string> GetOperations(Dictionary<string, string> errorsDict); 
     [OperationContract] 
     List<string> GetCategories(Dictionary<string, string> errorsDict); 
    } 

サブインターフェイス:私は単一のサービスでそれを行うことができますどのように

[ServiceContract] 
public interface IBLManage 
{ 
    [OperationContract] 
    Dictionary<string, string> Save(Dictionary<string, object> entityDict, bool isNewEntity = true); 

    [OperationContract] 
    object GetEntity(Dictionary<string, object> entityDict, Dictionary<string, string> errorsDict); 
} 

BL.jpg

? または、私は多くのサービスを作成する必要がありますか? (それは約20だろう) もし私がたくさん作るなら、同じexeでそれらを動かすことができますか?

インターフェイスの戻り値についてはthis questionが見つかりましたが、リンクが壊れています。正確には問題はありません。

ありがとうございました。

+1

サービス契約とデータ契約が混乱していますか?前者はワイヤを介して送信するデータの定義で、後者は公開するものを定義します。基本的には、あなたのサービスを実装する方法は無料です。それは1つかもしれないし、20になるかもしれない、それは私が本当に理解できないあなたの状況に依存する。データベースからデータを公開する場合は、WCF Data Servicesを検討してみませんか? – hbulens

+0

または、おそらくあなたはSOAPサービスとインターフェイスを混乱させるでしょうか? A *サービス*には、データ型と操作の明確なセットがあります。 .NETインターフェイスは、他の言語を使用する代わりにメタデータを定義する便利な方法です。 "サブサービス"のようなものはないので、サブインターフェースのようなものはありません –

+1

複数のインターフェースを(継承を介して)1つのインターフェースに「連鎖」して、1つのサービスで実装することができます。すなわち、 'public class Service:IServiceA'、' IServiceA'は 'IServiceB'、' IServiceC'などを継承/実装します。 – Tim

答えて

0

サービスごとに複数のインターフェイスを実装し、必要に応じて同じエンドポイントを使用できます。

例:

public partial class MyServices 
{ 
} 

public partial class MyServices: IBL 
{ 
    // IBL implemnetantion 
} 

public partial class MyServices : IBLManage 
{ 
    // IBLManage implementation 
} 

のように。

@Timがコメントしたように、継承を使用することもできます。

+0

ありがとうございます。これは可能な解決策ですが、これにより私は最初のデザインによって分離されたクラス(サービス)を結合する必要があります。 –

関連する問題