2009-08-10 74 views
1

我傳遞一個對象到WCF服務並沒有得到任何回報。我檢查變量是否傳遞給實際執行該工作的方法,並注意到該對象上沒有設置任何值。這裏的對象:WCF對象參數丟失值

[DataContract] 
public class Section { 

    [DataMember] 
    public long SectionID { get; set; } 

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

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

    [DataMember] 
    public int Order { get; set; } 
} 

下面是該方法的服務代碼:

[OperationContract] 
public List<Section> LoadAllSections(Section s) { 
    return SectionRepository.Instance().LoadAll(s); 
} 

實際調用該方法是這樣的,位於一個Silverlight XAML文件中的代碼:

SectionServiceClient proxy = new SectionServiceClient(); 
proxy.LoadAllSectionsCompleted += new EventHandler<LoadAllSectionsCompletedEventArgs>(proxy_LoadAllSectionsCompleted); 
Section s = new Section(); 
s.SectionID = 4; 
proxy.LoadAllSectionsAsync(s); 

當代碼最終進入方法LoadAllSections(Section s)時,參數的SectionID沒有設置。我遍歷代碼,當它進入返回IAsyncResult對象的生成代碼時,對象的屬性被設置。但是當它實際調用方法LoadAllSections時,收到的參數是完全空白的。有什麼我必須設置使方法調用之間的proeprty棒?

+0

你能告訴我服務和客戶端配置嗎?只是兩端的''中的部分... – 2009-08-10 18:14:47

+0

數據表可序列化嗎? – 2010-09-14 13:46:22

回答

0

這似乎很奇怪,但會發生什麼。我在返回DataTable的服務上有另一個方法。無論何時一個方法試圖返回一個DataTable,傳入的參數都會丟失它們的值。拿出方法,一切正常。奇。

+0

的確很奇怪...... – 2009-08-10 20:38:46

+1

這聽起來像是客戶和服務之間的不匹配。重建服務;開始服務;在客戶端應用程序中執行更新服務引用(確保URL指向已啓動,重建的服務);重建客戶端並重試。 – 2009-08-11 00:34:59

0

工作對我來說很好 - 它可能是一個愚蠢的錯字?

在您的OperationContract中,您定義了LoadAllSections,但在您的客戶端代碼中,您將事件處理程序附加到proxy.GetAllSectionsCompleted事件 - 也許這只是錯誤的處理程序?不應該是proxy.LoadAllSectionsCompleted ??

Marc

+0

如果我從Silverlight XAML文件調用此代碼,這無關緊要嗎?從結果回來後,我仍然無法堅持價值觀。抱歉上面的錯字,我會解決它。 – Josh 2009-08-10 16:20:41

+0

瞭解Silverlight肯定很重要! – 2009-08-10 18:14:10