2016-08-12 67 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

感謝您的建議。這是可能的解決方案,但是這使我能夠將通過初始設計分開的類(服務)聯合起來。 –