2009-01-29 81 views
8

爲什麼WCF應該在我的WCF服務返回時清楚地填充WCF返回給我一個「空」實例化對象?自定義對象從WCF返回爲「空」嗎?

例如一個簡單的方法OperationContract

response.Client = new Client(); 
response.Client.ID = 99; 
return response; 

返回一個「空」 Client對象(在客戶機接收端)和所有字段都null或零。然而就在響應之前,如果我檢查response.Client.ID,它會填充99?

只是爲了更糟的是,我有一個錯誤的對象,我填充這樣:

response.Errors.Add(new CodedError(Errors.ErrorCodes.LOGIN_AUTHENTICATION_ERROR)); 

不過,我可以看到這個接收端的錯誤列表?

回答

8

如果有人遇到這個問題,我找到了解決辦法。由於業務需求,我用[Serializable][DataContract]標記了我的自定義類,在.NET 3.5 SP1中,這似乎是非法的。

我有一個朋友發送的WCF對象同時具有.NET 3.5 SP1以前的這些屬性,它工作正常。有趣。

僅供參考,我只是簡單地使用了[Serializable],它正在通過我的對象圖發送正確。我需要這個用於xml序列化的軌道。

這是一個痛苦的問題,但很高興它現在終於正常運作....

3

對象標記爲[Serializable]還是[DataContract]?您需要將對象標記爲一個或另一個。

WCF只知道如何通過線路傳遞原語或可序列化的對象。

+0

是的模型被標記爲實際,因爲我需要序列化在客戶端執行保存到文件。 – GONeale 2009-01-29 23:29:49

+0

有趣。在這一點上我什麼也沒有得到。會再考慮一下。 – 2009-01-29 23:35:46

+0

Np。很難看不到我的模型,但它是一個非常標準的模型,儘管人們可以假設,錯誤模型可以工作。客戶端模式不起作用。模型之間存在不兼容性,所以我試圖將其切回,因爲客戶端具有另一個自定義對象,並查看它會發生什麼...... – GONeale 2009-01-29 23:37:08

2

客戶端代理是否最新?我發現合約變更時客戶沒有更新以反映變更時發生。

1

我有同樣的問題。我已經更改了服務器端對象上的名稱空間,儘管我更新了服務引用配置,但仔細查看命名空間是舊的命名空間,因此雖然提琴手確認數據正確地通過線路傳輸,但數據未通過到我的客戶端對象。刪除並重新添加服務參考竅門

2

現在可能已經太遲了,但是對於這個特定問題有一個簡單的解決方法。至少有人會覺得這很有用。

我有2個不同命名空間的項目。

  1. MyProject.Business.Entities(標有[DataContract]
  2. MyProject.Client.Entities(客戶端實體代表業務對象)

使用的AssemblyInfo.cs併爲每個業務和客戶項目添加以下行。

[assembly: ContractNamespace("http://www.tempuri.org/MyProject", 
           ClrNamespace = "MyProject.Business.Entities")] 

[assembly: ContractNamespace("http://www.tempuri.org/MyProject", 
           ClrNamespace = "MyProject.Client.Entities")] 

或者,你也可以這樣做。

[DataContract (Namespace = "http://www.tempuri.org/MyProject")] 
public class Account 
{}