2013-07-04 78 views
0

我有幾個WCF服務使用相同的dataContracts在它們之間交換數據。WCF DataContract集中

我可以有一種Metadata Endpoint來集中管理所有這些模式嗎?

當創建一個新的WCF服務時,我怎樣才能使它從元數據端點加載模式(而不是重新定義它們)在其operationContracts中使用?

謝謝!

+0

我不確定我是否理解您的問題,但是如果您希望在多個服務之間使用相同的數據合同,只需將它們放入單獨的程序集並使每個服務引用該程序集即可。 – Tim

+0

你是指什麼:元數據端點?並集中管理所有這些模式?你的模式是什麼?什麼是集中管理? – ilansch

回答

0

正如我在評論中所說的,我不確定我是否理解您的問題(至少在想要元數據端點方面),但聽起來您希望能夠重複使用多個不同的現有數據協定服務。

做到這一點的最簡單的方法是把在一個單獨的組件(類庫 - DLL)中的數據合同,然後讓服務引用總成 - 他們沒有服務本身內部定義。

下面是一個簡單的例子(代碼是僅用於說明,並非意在實際執行任何操作或者可以是完整的樣品):

MyDataContracts組件

namespace MyDataContracts 
{ 

    [DataContract] 
    public class DataContract1 
    { 

    } 

    [DataContract] 
    public class DataContract2 
    { 

    } 
} 

MyService1組件

using MyDataContracts; 

namespace MyService1 
{ 

    [ServiceContract] 
    public interface IMyService1 
    { 

     [OperationContract] 
     DataContract1 GetSomeData(string someParm); 
    } 
} 

MyService2程序集

using MyDataContracts; 

namespace MyService2 
{ 

    [ServiceContract] 
    public interface IMyService2 
    { 

     [OperationContract] 
     void SendSomeData(DataContract1 dc); 

     [OperationContract] 
     DataContract2 GetSomeOtherData(int parm); 
    } 
} 

當然,每個WCF服務項目都需要包含對MyDataContracts程序集的引用。

現在,只要您創建新服務,只需添加對MyDataContracts.dll的引用,並且可以在其中重新使用數據合同。

+0

同意,然後從客戶端我們ChannelFactory [1]與該共享程序集中的合同,並避免完全添加服務引用。 [1] http://msdn.microsoft.com/en-us/library/ms734681.aspx – kellyb

+0

@kellyb - 是的,如果服務合約在共享程序集中。數據合同不應包含在ChannelFactory中。 – Tim

+0

謝謝!我在使用WCF kewyord時犯了一個錯誤。假設你有一個團隊在wcf中實現一個服務,另一個團隊在Java中。共享的DLL方法不會工作。我希望能夠以獨立於平臺的方式集中合同定義。 – user1275011