2011-08-23 21 views
1

我有一個classA實現IClassA接口。在接口類上使用DataContract?

然後WCF有一個方法將採取IClassA作爲參數,我們實際上會將一個classA對象傳遞給該方法。

public IClassA() 
{ 

} 

[DataContract] 
public classA :IClassA() 
{ 

} 

//WCF: 
public void MethodA(IClassA _objClassA) 
{ 

} 

對於普通的編碼,而不使用WCF MethodA,我們沒有任何問題。

但是當使用WCF時,客戶端無法在參考中找到ClassAIClassA接口。

我不知道這是甚至possbile?

P.S.界面不能使用DataContract屬性。

+0

我的猜測是你的客戶端不知道'IClassA'或'ClassA'甚至是什麼。您需要通過引用包含這些聲明的程序集或在客戶端重新實現它們來分享這些知識(如果這樣做有道理) – Marc

+1

您的意思是DataContract。 –

+0

@Marc通常,當我們在WCF方法中使用它時,客戶端應該知道IClassA。當客戶端引用WCF時,調用MethodA將顯示我必須使用'IClassA'作爲輸入參數。但是這裏只顯示'Object'作爲參數。我想知道是否引用這些程序集是一個好方法,這樣做意味着我們必須將程序集提供給每個使用它的程序員。他們不能直接得到WCF的參考... –

回答

0

您的解決方案中創建一個新的類項目,把它SharedInterfaces

添加接口類IClassA到該項目。然後構建共享項目並在您的WCF主機和客戶端應用程序中引用該dll。那麼你不會有任何問題。

+0

我認爲你的意思是一樣的馬克?如果客戶端應用程序不是由我們創建的呢?因爲客戶端應用程序將由第三方創建,所以我需要給他們定義SharedInterfaces的dll文件? –

+0

@陳K,是的,這基本上是馬克建議的。是的,您需要向第三方發送這些共享的程序集。 Q&你爲什麼要第三方能夠擴展這個類? – Jethro

+0

我們正在爲HQ開發團隊開發一個Web服務(不是真正的第三方),他們會安裝我們的Web服務。所以我只是想,如果他們需要做的只是添加Web服務引用並能夠擁有所有類定義,那麼可能會更容易。而不是讓他們需要添加另一個DLL,然後添加Web服務引用等。 –

0

您可以爲IClassA創建一個抽象類,將其標記爲DataContract,使用屬性KnownType [(typeof(ClassA))]。

[DataContract] 
[KnownType(typeof(ClassA))] 
public abstract class ClassABase() 
{ 

} 

[DataContract] 
public classA :ClassABase 
{ 

} 

//WCF: 
public void MethodA(ClassABase a) 
{ 

}