2016-08-12 75 views
2

我是WCF的新手,我想创建一个API到数据库。返回WCF中的很多接口

DB orm是由EntityFramework构建的,我包装了所有获取一个的功能,找到许多并保存每个实体必须实现的接口和接口。

我发现WCF服务只能加载一个接口,但我有很多接口,每个接口都由多个类实现。

我的主界面:

[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

您是否将数据合同与服务合同混淆?前者是定义您将通过电线发送的数据,而后者定义您将要公开的内容。所以基本上你可以自由地实现你的服务。它可能是一个,也可能是20个,这取决于我不了解的情况。如果你想公开数据库中的数据,你为什么不考虑WCF数据服务? – hbulens

+0

或者您可能会让SOAP服务和接口混淆?一个*服务*有一套明确定义的数据类型和操作。 .NET界面是定义该元数据而不是使用其他语言的便捷方式。没有“子接口”这样的东西,因为没有“子服务”这样的东西。 –

+1

您可以将多个接口(通过继承)“链接”成一个接口,然后由一个服务实现。即公共类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

感谢您的建议。这是可能的解决方案,但是这使我能够将通过初始设计分开的类(服务)联合起来。 –