我有一個具有引用幾個接口和類的屬性的類。在WCF中使用多個依賴關係傳遞類的最簡單方法是什麼(使用共享DLL)?
現在我試圖通過WCF(命名管道)傳遞這個類,處理它的最佳方式是什麼?
應該進入所有引用的接口,類和標記的東西爲<DataContract()>, <Serializable()> and <DataMember()>
,這意味着至少要修改6-10個類。
有沒有其他實用的方法可以解決這個問題?這些接口和類都在主機以及客戶端共享。他們正在使用非常相同的DLL。
我有一個具有引用幾個接口和類的屬性的類。在WCF中使用多個依賴關係傳遞類的最簡單方法是什麼(使用共享DLL)?
現在我試圖通過WCF(命名管道)傳遞這個類,處理它的最佳方式是什麼?
應該進入所有引用的接口,類和標記的東西爲<DataContract()>, <Serializable()> and <DataMember()>
,這意味着至少要修改6-10個類。
有沒有其他實用的方法可以解決這個問題?這些接口和類都在主機以及客戶端共享。他們正在使用非常相同的DLL。
不要使用這種複雜的類型 - 創建一個沒有依賴關係的新數據協定類型並通過線路發送。然後創建一個接受此數據合同並將數據合同映射到現有類型的操作合同。由於您正在共享程序集,因此可以確保從數據協定映射到複雜類型的邏輯位於共享程序集中,以便線路的兩端都可以訪問它。
作爲一個方面說明:你確定這是做到這一點的最好方法嗎? WCF在服務彼此分離時效果最好,聽起來您的服務對彼此知之甚多。
你可以調用的DataContractSerializer與參數(沒有你的類指定的任何東西),或對那些在你的應用程序配置文件中的條目 - 請參閱:
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx
http://msdn.microsoft.com/en-us/library/ms731073.aspx
http://msdn.microsoft.com/en-us/library/ms731809.aspx
但是,我會在班級中定義合同。這是一次性的努力,一定會得到回報。如果您的類實在是太複雜了,你可以派生另一個從它有定義你感興趣的DataContracts和數據成員
WCF不「調課」 - 它系列化您的參數爲(基於文本)消息並將其反序列化到另一端。
任何您想要傳輸的東西都必須是可序列化的,並且必須以XML模式表示 - 您不能傳輸泛型或接口 - 只能傳遞具體類型。
我同意安德魯黑爾 - 爲您的WCF服務創建單獨的類,並將您當前的類映射到這些傳輸類(使用諸如AutoMapper之類的東西可以使您的生活變得更容易)。
Marc
我害怕有人會這麼說!太多事情要做:( – 2009-10-19 15:28:38
我知道它看起來像很多工作,但從長遠來看,它會得到回報,任何其他方法都不容易擴展。 – 2009-10-19 15:32:40