2011-11-02 32 views
1

我必須創建一個具有五個不同組件的WCF服務。每個組件都有一個接口,每個組件都有其具體的實現。所有這五個接口組合在一起使我的應用程序。WCF服務可以組成各種界面嗎?

我不知道我是否應該創建5個獨立的WCF服務,客戶端可以調用。雖然他們是獨立的,並有單一的責任,但我試圖避免創建5個服務,因爲這將是託管,部署和維護的矯枉過正。另外他們是相當輕的重量。 所以我想問你的意見和建議嗎?

  1. 我是否應該創建一個大型接口來實現所有其他五個接口以及具有所有接口功能的具體實現,例如,

    public interface IMainInterface: IComponent1, IComponent2, IComponent3, IComponent4, IComponent5 
    { 
        region implementation of IComponent1 
         public void CallMethod(){...} 
        endregion 
    
        region implementation of IComponent2 
        endregion 
    
        //and so on 
    
    } 
    

將它不會弄亂的具體實施,因爲實施component1..5的將是IMainInterface的實現裏面?

  1. 我應該有五個接口作爲主要接口的屬性,並創建我的實現調用五個實現例如方法public方法

    public interface IMainInterface 
    { 
        public IComponent1 Component1 {get;set;} 
        public IComponent2 Component1 {get;set;} 
        public IComponent3 Component1 {get;set;} 
        public IComponent4 Component1 {get;set;} 
        public IComponent5 Component1 {get;set;} 
    } 
    

    它沈志南實施,將是這樣的:

    public class Main:IMainInterface 
    { 
        public void CallComponent1Method() 
        { 
         Component1.CallMethod(); 
        }  
    } 
    

你會建議或者是沒有辦法,我可以採取另一種方法哪種方法?

回答

1

我應該創建一個大的接口,實現了所有的 其他五個接口,並且具有功能 所有接口的具體實現,例如

是的,一個WCF服務由其代表單個界面的服務合同定義。該接口應該用[ServiceContract]屬性和每個單獨的方法用[ServiceOperation]屬性進行修飾。

+0

難道它不會混淆具體實現,因爲我將不得不將所有組件的concerete實現添加到主要組件中。 – InfoLearner

+0

@KnowledgeSeeker,是的,但這就是WCF的工作原理。如果您定義另一個WCF服務的另一個接口(服務契約)。 –

+0

謝謝。所以你說「大否」最後的做法。 – InfoLearner

1

其實如你所願,你可以有多個接口。唯一需要爲每個接口定義一個單獨的端點。

  1. 您的課程必須實施您想要的所有合同。
  2. 您想要公開的所有合同都必須用[ServiceContract]屬性標記。
  3. 對於每個單獨的接口,您需要在配置文件或代碼中聲明性地定義單獨的端點。
+0

請不要在您的帖子中使用簽名或標語。 http://stackoverflow.com/faq#signatures – Greg

+0

在這種情況下,如果您只是想讓您定義的接口文件更輕,只需使用部分定義:通過標記將您的接口代碼分成幾個文件部分但請記住保持命名空間相同。在這種情況下,您將擁有一個界面,並且易於處理代碼。 – Artak

+0

是的,但界面將是巨大的。我不應該有五個服務主機? – InfoLearner

0

我會建議使用ServiceContract和ServiceOperation屬性創建5個接口,並從5個接口繼承一個類幷包含其實現的定義。

我沒有看到創建實現其他5第6個接口的理由,除非它有自己的一些方法或有一定的建築目的

+0

服務主機將調用哪個接口作爲其服務合同? – InfoLearner

0

WCF服務是由單一類實現。但是,該類可以支持無限數量的接口。每個接口都可以作爲自己的端點公開。請參閱Multiple Contracts

因此,您絕對可以使用單一服務來實現所有5個接口。請注意,哪個服務實現了哪個端點從客戶端角度抽象出來。如果客戶需要與三個接口交談,那麼它需要爲三個不同的端點創建一個新的代理/連接,並且不應該對共享的底層服務實現做出任何假設。