2012-09-04 61 views
0

我必須將幾個參數傳遞給WCF服務,所以我創建了一個具有相應字段的類,並且認爲我會將該類的一個實例傳遞給該服務。但該服務將該類視爲與其擁有的類不同。如何將自定義類傳遞給WCF服務?

所以我想創建一個服務這個類的,但我發現,在調用程序

Class1 c = new Class1();//of the class in the service 
FieldInfo[] f = c.GetType().GetFields(); 

返回任何內容。

所以我嘗試了一個界面,但服務仍然希望它的類從服務。

那麼如何傳遞一個自定義類實例,並仍然能夠像調用其他類一樣在調用方中使用該類?

編輯:

這是我在做什麼:我創建了VWD網站(只是簡單的模板)( - 視覺工作室的網站)。並添加了一個WCF服務和一個文件

[DataContract] 
[Serializable()] 
public class Class1 
{ 
    [DataMember] 
    public string s = ""; 
} 

編輯:好的。出於某種原因,這些字段被轉換爲屬性。

謝謝大家!

+0

所以你的服務(假設它是託管的)中有一個類 - 然後你有一個客戶端編程試圖調用託管服務中的類,這是正確的嗎? – LukeHennerley

+0

是的。 (它現在託管在我的IIS上。)但是這個類並不是「在」其中。它只是在同一個文件中。 – ispiro

+0

檢查你的應用程序配置文件 –

回答

3

這裏是一個Datacontract的例子:

[DataContract] 
public class Person 
{ 
    [DataMember] 
    public int id { get; set; } 

    [DataMember] 
    public string Name{ get; set; } 
} 

然後你可以從你的WCF客戶端啓動它或者把它作爲一個方法的參數或者讓它從一個方法(函數)返回。

+0

請參閱編輯我的問題。 – ispiro

+0

謝謝。我找到了答案(請參閱我的問題的結尾。) – ispiro

2

您在這裏尋找DataContract。您想要在OperationContract中使用的類必須標記爲DataContract才能進行序列化。

編輯:如果您在Web應用程序中添加了對服務的引用,則應該能夠在Reference.cs文件中找到該類。

+0

就是這樣。我可以創建它。但我只能用它來限制 - 上面的代碼('GetFields')不起作用。 – ispiro

+0

請參閱編輯我的問題。 – ispiro

+0

@ispiro更新了回覆。 – danish

2

我不確定我是否理解你的問題。看起來你想通過一個自定義類從wcf服務(請看看http://msdn.microsoft.com/en-us/library/ms733127.aspx)。我不明白,除非消耗另一項服務,否則如何將某些內容傳遞給WCF服務。

編輯: 您不能使用客戶端的類作爲服務方法的參數。

+0

好的。這就是我第一步學到的東西。但即使是WCF類也不行。 – ispiro

+0

請參閱編輯我的問題。 – ispiro

+0

看看http://stackoverflow.com/questions/751074/constructor-in-wcf和http://stackoverflow.com/questions/6316118/constructor-in-wcf-datacontract-not-reflected-on-client ,也許這會幫助 –

相關問題